【问题标题】:ArrayAdapter add only one item on listviewArrayAdapter 在 listview 上只添加一项
【发布时间】:2023-03-03 08:44:31
【问题描述】:

我有一个简单的列表视图,应该显示一个人的全名。列表视图的每个项目都有三个字段,“名称”、“中间名”和“姓氏”。问题是,我只填充一项。代码的最后一个;这是我得到的输出:

请注意,我的“姓氏”字段中只有文本,这就是问题所在。这是我在我的 java 类上调用 ArrayAdapter 的地方:

        ArrayAdapter<String> n = new ArrayAdapter<String>(this, R.layout.teste, R.id.name, name);
        this.setListAdapter(n);
        ArrayAdapter<String> mn = new ArrayAdapter<String>(this, R.layout.teste, R.id.middlename, middlename);
        this.setListAdapter(mn);
        ArrayAdapter<String> ln = new ArrayAdapter<String>(this, R.layout.teste, R.id.lastname, lastname);
        this.setListAdapter(ln);

这是我的字符串:

    String [] name = {"Carol", "Heloisa", "Thaiane", "Hannah"};
    String [] middlename = {"Martins", "Bechelli", "Soldani", "Lopes"};
    String [] lastname = {"Santos", "Pereira", "Borges", "Machado"};

这是 teste.xml:

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


    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Name: "
            android:id="@+id/textView"
            android:layout_column="0" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:id="@+id/name"
            android:layout_column="1" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="MiddleName"
            android:id="@+id/textView2"
            android:layout_column="0" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:id="@+id/middlename"
            android:layout_column="1" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="LastName"
            android:id="@+id/textView3"
            android:layout_column="0" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:id="@+id/lastname"
            android:layout_column="1" />
    </TableRow>


</TableLayout>

为什么我不能填充 3 个 TextView?谢谢。

【问题讨论】:

  • 你需要通过扩展ArrayAdapter 来创建自定义适配器
  • 您正在覆盖您的设置列表适配器 2 次。姓氏覆盖中间人覆盖名称。我建议使用自定义适配器或扩展 ArrayAdapter。
  • 是的,它只会显示姓氏,因为您只能设置一个适配器。因此,您将不得不制作一个自定义适配器!
  • 嗯,我该怎么做? @ρяσѕρєяK
  • @BrunoBrandãoBorges:见以下Custom ArrayAdapter for a ListView (Android)

标签: android listview textview android-arrayadapter listadapter


【解决方案1】:

你不应该调用 3 次 setAdapter,因为最后一个适配器会覆盖前一个,这就是为什么只有最后一个 textview 显示项目。

考虑到您的情况,我认为您应该使用SimpleAdapter 或自定义BaseAdapter 来制作。您可以参考ListView With BaseAdapter,或google android BaseAdapter

【讨论】:

  • 我之前尝试过,但我总是得到一个 NullPointerException 并且我不知道如何解决它。所以我带来了这段代码,我正在向你们展示。但是谢谢,我真正想知道的是,是否有可能按照我正在尝试的方式做我正在尝试的事情......我会想办法的。再次感谢
【解决方案2】:

对于列表视图,我们只能设置一个适配器。

我的建议是使用自定义适配器而不是 arrayadapter。

适配器使用下面的代码

public class CustomAdapter extends BaseAdapter{   
    String [] name;
    String [] middlename;
    String [] lastname;
    Context context;
 int [] imageId;
      private static LayoutInflater inflater=null;
    public CustomAdapter(Context context, String[] name,String[] middlename,String[] lastname) {
        // TODO Auto-generated constructor stub
        context=mainActivity;
        this.context=context;
        this.name=name;
        this.middlename=middlename;
        this.lastname=lastname;
         inflater = ( LayoutInflater )context.
                 getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return result.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public class Holder
    {
        TextView nametv,middlenametv,lastnametv;
        ImageView img;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Holder holder=new Holder();
        View rowView;       
             rowView = inflater.inflate(R.layout.program_list, null);
             holder.nametv=(TextView) rowView.findViewById(R.id.textView1);
             holder.middlenametv=(TextView) rowView.findViewById(R.id.textView2);
             holder.lastnametv=(TextView) rowView.findViewById(R.id.textView3);

         holder.nametv.setText(name[position]);
         holder.middlenametv.setText(middlename[position]);
         holder.lastnametv.setText(lastname[position]);

        });   
        return rowView;
    }

} 

并在活动中设置适配器,如下所示

lv=(ListView) findViewById(R.id.listView);
lv.setAdapter(new CustomAdapter(this, name,middlename,lastname));

【讨论】:

  • 很好,谢谢。我明天试试,然后给你反馈!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多