【发布时间】:2011-05-02 05:42:19
【问题描述】:
我的 android 列表活动中有一个列表视图,它通过 json 文件获取数据。在列表视图中,我必须显示项目的基本详细信息。当我们单击一个项目时,我需要显示有关单击的项目的更多信息。那么如何识别用户点击了哪个项目呢?
【问题讨论】:
-
您需要在哪里显示更多信息?
标签: android json android-listview
我的 android 列表活动中有一个列表视图,它通过 json 文件获取数据。在列表视图中,我必须显示项目的基本详细信息。当我们单击一个项目时,我需要显示有关单击的项目的更多信息。那么如何识别用户点击了哪个项目呢?
【问题讨论】:
标签: android json android-listview
在您的侦听器实现中,您引用了被点击的View,如果是itemClick(或ExpandableList:groupClick/childClick),您还可以在列表中找到基础数据的位置.
所以只需使用位置从您用于填充列表(适配器)的数据结构中检索点击的数据。
更新
如果您有一个ListActivity,其中dataList 成员保存您在列表中显示的值,您只需覆盖它的onListItemClick 方法:
/**
* The list of custom data you display in this activity
*/
private ArrayList<MyData> dataList;
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
final MyData selectedValue = dataList.get(position);
//TODO: deal with this selectedValue
}
API 文档用于onListItemClick
这个方法会被调用 列表中的项目被选中。 子类应覆盖。
子类可以调用 getListView().getItemAtPosition(位置) 如果他们需要访问数据 与所选项目相关联。
参数:
l点击所在的ListView
发生了v 内被点击的视图
列表视图position视图的位置
在列表中id 所在项目的行 ID
已点击您可以在 Android-er here 和 here 上找到完整的示例。
【讨论】:
public class MainActivity extends AppCompatActivity {
private ListView listview;
private ArrayList<DataModel> arrayList;
private DataModel datamodel;
private AdapterForList adapterForList;
public ArrayList<DataModel> getArrayList(){
arrayList = new ArrayList<DataModel>();
datamodel = new DataModel();
for(int i=0; i<8; i++){
datamodel.setTextData("count"+i);
}
return arrayList;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
adapterForList = new AdapterForList(this,getArrayList());
listview.setAdapter(adapterForList);
}
private class AdapterForList extends BaseAdapter{
ArrayList<DataModel> DataList;
private ViewHolder holder;
private LayoutInflater inflater;
private Context context;
private AdapterForList(Context context,ArrayList<DataModel> arrayList){
this.DataList = arrayList;
this.context = context;
Log.d("hereeee","--->"+DataList.size());
}
@Override
public int getCount() {
return DataList.size();
}
@Override
public Object getItem(int position) {
return DataList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
holder = new ViewHolder();
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.raw_view, null, true);
holder.textview = (TextView) convertView.findViewById(R.id.textView);
holder.lltextview = (LinearLayout) convertView.findViewById(R.id.lltextview);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.textview.setText(DataList.get(position).getTextData());
holder.lltextview.setTag(R.integer.btnview, convertView);
holder.lltextview.setTag(R.integer.btnpos, position);
holder.lltextview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View tempview = (View) v.getTag(R.integer.btnview);
Integer pos = (Integer) v.getTag(R.integer.btnpos);
TextView tv = (TextView) tempview.findViewById(R.id.textView);
tv.setText("changeee");
}
});
return convertView;
}
private class ViewHolder{
public TextView textview;
public LinearLayout lltextview;
}
}
}
【讨论】: