我是Android开发的新手,我在查找ListView
中点击的位置和项目时遇到了问题。
我为ListView
制作了一个自定义适配器,其中包含三个TextView
。
我已实施:
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { ... }
我可以毫无问题地检索我点击的位置,但无法找到我在行中点击TextView
的解决方案。
arg2
和arg3
始终是相同的值,任何想法都可以解决?
感谢。
答案 0 :(得分:0)
onItemClick 在你的情况下不起作用。你想从customadapter里面的textview获取值。每个textview里面的数据可能不一样。所以我们必须在CustomAdapter里面的每个textview上应用setOnClickListener
<强>问题强>
我们仍然不知道listview的哪个位置以及该位置的哪个textview被点击。所以我们使用 setContentDescription 设置每个textview值。
然后点击已使用 getContentDescription 从textview中设置的值get。
退房。我为你做了一个例子。以后也会发布你的代码。
public class CustomBaseAdapter extends BaseAdapter implements OnClicklistener{
private static ArrayList<Yourclass> searchArrayList;
Context mycontext;
private LayoutInflater mInflater;
ViewHolder holder;
static int pos;
public CustomBaseAdapter(Context context, ArrayList<Yourclass> results) {
mycontext = context;
searchArrayList = results;
mInflater = LayoutInflater.from(context);
}
public void clearList() {
searchArrayList.clear();
this.notifyDataSetChanged();
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.YourView, null);
holder = new ViewHolder();
holder.firsttextview= (TextView) convertView.findViewById(R.id.firsttextview);
holder.secondtextview= (TextView) convertView.findViewById(R.id.secondtextview);
holder.thirdtextview= (TextView) convertView.findViewById(R.id.thirdtextview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.firsttextview.setText(searchArrayList.get(position).get_text1());//These methods belongs to the Yourclass whose objects are populated based on your records
holder.secondtextview.setText(searchArrayList.get(position).get_text2());//*get_text2 Replace with your method
holder.thirdtextview.setText(searchArrayList.get(position).get_text3());//*get_text3 Replace with your method
holder.firsttextview.setContentDescription(holder.firsttextview.getText().toString());
holder.secondtextview.setContentDescription(holder.secondtextview.getText().toString());
holder.thirdtextview.setContentDescription(holder.thirdtextview.getText().toString());
holder.firsttextview.setOnClickListener(this);
holder.secondtextview.setOnClickListener(this);
holder.thirdtextview.setOnClickListener(this);
return convertView;
}
static class ViewHolder {
TextView firsttextview;
TextView secondtextview;
TextView thirdtextview;
}
@Override
public void onClick(View v) {
switch (v.getID()) {
case R.id.firsttextview:
String des1 = v.getContentDescription().toString();
Toast.makeText(mycontext, des1, 5000).show();
break;
case R.id.secondtextview:
String des2 = v.getContentDescription().toString();
Toast.makeText(mycontext, des2, 5000).show();
break;
case R.id.thirdtextview:
String des3 = v.getContentDescription().toString();
Toast.makeText(mycontext, des3, 5000).show();
break;
default:
break;
}
}
}
答案 1 :(得分:0)
在您的列表中adapter
将onClickListener
放在textview
上,您就可以了解其价值
我在这里只提供相关代码,试试这个,它对我有用
viewHolder.userName = (TextView) convertView.findViewById(R.id.username);
viewHolder.userName.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
TextView text=(TextView)v;
if(text!=null){
System.out.println("\nUsername :"+text.getText().toString());
}
});
}
希望它有所帮助,干杯!...