从android中的Listview适配器访问Activity中的TextView

我有一个带有ListView的Activity和一些TextView,如下所示,

我想在适配器的fill()方法中调用OnClickListener中的TextViews的setText()方法。 但是我没有访问这些TextViews ……!

怎么办呢?

ActivityMoshtari.class:

public class ActivityMoshtari extends Activity { public ArrayList moshtariItems = new ArrayList(); public ArrayAdapter adaptermoshtari; ListView lstMoshtari; TextView txtInfoMoshtariName; TextView txtInfoMoshtariTel; TextView txtInfoMoshtariMob; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_moshtari); txtInfoMoshtariName= (TextView) findViewById(R.id.txtInfoMoshtariName); txtInfoMoshtariMob = (TextView) findViewById(R.id.txtInfoMoshtariMob); txtInfoMoshtariTel = (TextView) findViewById(R.id.txtInfoMoshtariTel); lstMoshtari = (ListView) findViewById(R.id.lstMoshtari); adaptermoshtari = new AdapterMoshtariItem(moshtariItems); lstMoshtari.setAdapter(adaptermoshtari); for (int i = 0; i < 10; i++) { StructMoshtariItem moshtariitem = new StructMoshtariItem(); moshtariitem.id = "" + i; moshtariitem.name = "some name" + i; moshtariitem.tel = "someTel" + i; moshtariItems.add(moshtariitem); } adaptermoshtari.notifyDataSetChanged(); }} 

activity_moshtari.xml:

           

我有我的ListView适配器:

AdapterMoshtariItem.class

 public class AdapterMoshtariItem extends ArrayAdapter { public AdapterMoshtariItem(ArrayList array) { super(G.context, R.layout.moshtari_item, array); } private static class ViewHolder { public ViewGroup layoutRoot; public TextView txtMoshtariID; public TextView txtMoshtariName; public TextView txtMoshtariTel; public ImageView imgMoshtariRecordView; public ViewHolder(View view) { layoutRoot = (ViewGroup) view.findViewById(R.id.layoutRoot); txtMoshtariID = (TextView) view.findViewById(R.id.txtMoshtariID); txtMoshtariName = (TextView) view.findViewById(R.id.txtMoshtariName); txtMoshtariTel = (TextView) view.findViewById(R.id.txtMoshtariTel); imgMoshtariRecordView = (ImageView) view.findViewById(R.id.imgMoshtariRecordView); } public void fill(final ArrayAdapter adapter, final StructMoshtariItem item, final int position) { txtMoshtariID.setText(item.id); txtMoshtariName.setText(item.name); txtMoshtariTel.setText(item.tel); layoutRoot.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { } }); } } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; StructMoshtariItem item = getItem(position); if (convertView == null) { convertView = G.inflater.inflate(R.layout.moshtari_item, parent, false); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.fill(this, item, position); return convertView; } 

}

您可以将视图传递给适配器,以便您可以在需要时更新它。 为此,您需要在适配器构造函数中添加三个TextView参数。 适配器中的更改声明适配器类中的Textview变量

 TextView name,tel,mob; public AdapterMoshtariItem(ArrayList array,TextView txtInfoMoshtariName,TextView txtInfoMoshtariTel ,TextView txtInfoMoshtariMob) { super(G.context, R.layout.moshtari_item, array); this.name=txtInfoMoshtariName; this.tel=txtInfoMoshtariTel; this.mob=txtInfoMoshtariMob; } 

并更改填充数据function

 public void fill(final ArrayAdapter adapter, final StructMoshtariItem item, final int position) { name.setText(item.id); tel.setText(item.name); mob.setText(item.tel); layoutRoot.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { } }); } 

最后从类文件中传递适配器中的textViews。

  adaptermoshtari = new AdapterMoshtariItem(moshtariItems,txtMoshtariName,txtInfoMoshtariTel,txtInfoMoshtariMob); lstMoshtari.setAdapter(adaptermoshtari);