当列表视图中有多个项目时,从所选项目中读取文本

Read text from selected item when there are multiple items in a listview

我已经自定义了一个带有列表视图的适配器,每个列表项中有四个项目:

TextView id = tid
TextView id = tname
TextView id = tgender
TextView id = tage

现在单击,我想从 ID 为 'tid' 的项目的文本视图中获取文本。

public class TeacherAdapter extends ArrayAdapter <Teacher>{

private LayoutInflater inflater;
private ArrayList<Teacher> teachers;

public TeacherAdapter(Context context, ArrayList<Teacher> teachers) {
    super(context, 0, teachers);
    inflater = LayoutInflater.from(context);
    this.teachers = teachers;
}

public int getCount() {
    return teachers.size();
}

public Teacher getItem(int position) {
    return teachers.get(position);
}

public long getItemId(int position) {
    return position;
}

private static class ViewHolder {
    TextView txtName;
    TextView txtMobile;
    TextView txtDept;
    TextView txtId;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder;

    if (convertView == null) {
        viewHolder = new ViewHolder();
        convertView = inflater.inflate(R.layout.teacher_text_item, null);

        viewHolder.txtName = (TextView) convertView.findViewById(R.id.tName);
        viewHolder.txtMobile = (TextView) convertView.findViewById(R.id.tMobile);
        viewHolder.txtDept = (TextView) convertView.findViewById(R.id.tDepartment);
        viewHolder.txtId = (TextView) convertView.findViewById(R.id.tId);
        convertView.setTag(viewHolder);
    }
    else {
        viewHolder = (ViewHolder) convertView.getTag();
    }


    viewHolder.txtName.setText(teachers.get(position).getName());
    viewHolder.txtMobile.setText(teachers.get(position).getMobile());
    viewHolder.txtDept.setText(teachers.get(position).getDepartment());
    viewHolder.txtId.setText(teachers.get(position).getId()+"");

    return convertView;
}
}

我在多列表视图中有四个项目:姓名、手机号、部门、ID。我想要做的就是单击列表项时 getId

如果您有 OnItemClickListener,则被单击的视图将传递给它。检查视图是否不为空。然后,做:

@Override
public void onItemClick(AdapterView<?> arg0, View viewThatWasClicked, 
                                     int position, long arg3) {
    TextView tid = (TextView) viewThatWasClicked.findViewById(R.id.tid);

    String text= tid.getText().toString();
}

在listview的onItemClick方法中,写这段代码获取id。这里你需要直接从适配器中获取值,如下所述

  @Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) {
    // TODO Auto-generated method stub

    int id= adapter1.getItem(position).getId();
}

    @Override
        protected void onListItemClick(ListView list, View view, int position, long id) {
            super.onListItemClick(list, view, position, id);

            int id = getListView().getItemAtPosition(position).getId();
}

正确的代码

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {

            teacher=  parent.getItemAtPosition(position)
            String text = teacher.getId();
            //TextView tid = (TextView) view.findViewById(R.id.tid);
            //String text = tid.getText().toString();
        }
    });

这段代码解决了我的问题。

 @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    if (v != null){
        TextView textView = (TextView)v.findViewById(R.id.tId);
        Log.e("idthatclicked",textView.getText().toString());
    }
}
listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
               ViewHolder holder= (ViewHolder ) view.getTag();                       
               String text = holder.txtId.getText().toString();
            }
        });

通过这种方式,你可以跳过通过resouceId查找的部分,而是使用holder。