我的android列表活动中有一个列表视图,它通过json文件获取数据。在列表视图中,我必须显示该项目的基本详细信息。当我们点击某个项目时,我需要显示有关该项目的更多信息。那么如何识别用户点击的项目?
答案 0 :(得分:1)
在您的监听器实现中,您引用了被点击的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
}
onListItemClick
的API文档
此方法将在调用时调用 选择列表中的项目。 子类应该覆盖。
子类可以调用 getListView()。getItemAtPosition(位置) 如果他们需要访问数据 与所选项目相关联。
<强>参数强>:
l
ListView点击的位置
发生v
点击的视图
ListView position
视图的位置
在列表中id
项目的行ID
点击您可以在Android-er here和here上找到完整示例。
答案 1 :(得分:-1)
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;
}
}
}