当列表视图中有多个项目时,从所选项目中读取文本
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。
我已经自定义了一个带有列表视图的适配器,每个列表项中有四个项目:
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。