java - 从 Android 中的 Listview Adapter 访问 Activity 中的 TextView

标签 java android android-layout listview android-listview

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

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

如何做到这一点?

ActivityMoshtari.class:

public class ActivityMoshtari extends Activity {

public ArrayList<StructMoshtariItem>    moshtariItems   = new ArrayList<StructMoshtariItem>();
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:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/lstMoshtari"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
         >
    </ListView>
</LinearLayout>

<LinearLayout
    android:id="@+id/layInfoMoshtari"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/txtInfoMoshtariTel"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:textColor="#000"
        android:textSize="26sp" />

    <TextView
        android:id="@+id/txtInfoMoshtariMob"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:textColor="#000"
        android:textSize="26sp" />

    <TextView
        android:id="@+id/txtInfoMoshtariName"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:textColor="#000"
        android:textSize="26sp" />
</LinearLayout>

我的 ListView 有适配器:

AdapterMoshtariItem.class

public class AdapterMoshtariItem extends ArrayAdapter<StructMoshtariItem> {

public AdapterMoshtariItem(ArrayList<StructMoshtariItem> 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<StructMoshtariItem> 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;
}

最佳答案

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

TextView name,tel,mob;

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

并更改填充数据函数

public void fill(final ArrayAdapter<StructMoshtariItem> 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);

关于java - 从 Android 中的 Listview Adapter 访问 Activity 中的 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31529317/

相关文章:

Java编译错误: List<Integer> cannot be converted to ArrayList<Integer>

java - 为什么我不能比较 Exception 对象的相等性?

java.net.SocketException : Connection reset on TCP 异常

android-layout - 设置EditText错误图标的色彩

android - 垂直居中于右侧的 RelativeLayout

java - 如何使用spring批处理将数据库结果集转换为xml文件

Android读取短信历史

android - 如何在Android 10中获取IMEI

android - 如何在 Android 或 iPhone 上原生访问 Unity Assets ?

android - android :layout_gravity and android:gravity之间的区别