Android检索listview项目在自定义适配器中单击

时间:2014-05-14 20:24:56

标签: android listview adapter

我是Android开发的新手,我在查找ListView中点击的位置和项目时遇到了问题。

我为ListView制作了一个自定义适配器,其中包含三个TextView

我已实施:

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { ... }

我可以毫无问题地检索我点击的位置,但无法找到我在行中点击TextView的解决方案。

arg2arg3始终是相同的值,任何想法都可以解决?

感谢。

2 个答案:

答案 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)

在您的列表中adapteronClickListener放在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());                   
        }
    });
}

希望它有所帮助,干杯!...