【问题标题】:How to populate an ArrayList of items to ListView through a custom adapter?如何通过自定义适配器将项目的 ArrayList 填充到 ListView?
【发布时间】:2019-08-22 08:53:33
【问题描述】:

我有一个 ArrayList 项目,每个项目包含 2 个字符串和 1 个按钮。当我使用 List 来存储项目时,它运行良好。在我更改为 ArrayList 来存储项目后,模拟器显示一个空屏幕。

主要活动:

    public class MainActivity extends AppCompatActivity {


        public void mainlist(){
            ArrayList<ListItem> items = new ArrayList<ListItem>();
            for(int i = 0; i < items.size(); i++) {
                int num = i + 1;
                ListItem l = new ListItem("Item " + num, "sub item " + num);
                items.add(l);
            }
            ListView el=(ListView)findViewById(R.id.eventlist);
            MyArrayAdapter myArrayAdapter = new MyArrayAdapter(this, items);
            el.setAdapter(myArrayAdapter);
            myArrayAdapter.notifyDataSetChanged();
        }


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mainlist();
        }
    }

适配器:

    public class MyArrayAdapter extends ArrayAdapter<ListItem> {
        private ArrayList<ListItem> items;
        private Context context;

        public MyArrayAdapter(Context context, ArrayList<ListItem> items) {
            super(context, 0, items);
            this.items = items;
            this.context = context;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent){
            ListItem item = items.get(position);

            if(convertView==null) {
                convertView = LayoutInflater.from(context).inflate(R.layout.listitem, parent, false);
            }
            TextView itemView = (TextView)convertView.findViewById(R.id.item);
            TextView subItemView = (TextView)convertView.findViewById(R.id.sub_item);

            itemView.setText(item.getName());
            subItemView.setText(item.getDetail());

            return convertView;
        }
    }

【问题讨论】:

  • 如果List 接口可行,为什么不继续使用呢?或者甚至更好地迁移到回收站视图。 See here
  • 您的代码与此代码路径中的代码几乎完全相同,只是它使用getItem 而不是成员列表变量。我不认为这种变化会导致这样的问题。您确定对象已正确分配和读取吗? guides.codepath.com/android/…
  • 我刚改成getItem来匹配codepath,还是不行:(

标签: java android listview arraylist


【解决方案1】:

没有数据如何生成列表项。

ArrayList<ListItem> items = new ArrayList<ListItem>();
        for(int i = 0; i < items.size()/*size is 0,loop is not running*/; i++) {...

插入一些数据,例如:

public void mainlist(){
        ArrayList<ListItem> items = new ArrayList<ListItem>();
        items.add(new ListItem("str1","str2"));
        ListView el=(ListView)findViewById(R.id.eventlist);
        MyArrayAdapter myArrayAdapter = new MyArrayAdapter(this, items);
        el.setAdapter(myArrayAdapter);
    }

【讨论】:

    【解决方案2】:
    ArrayList<ListItem> items = new ArrayList<ListItem>();
      for(int i = 0; i < items.size(); i++) {
      int num = i + 1;
      ListItem l = new ListItem("Item " + num, "sub item " + num);
      items.add(l);
    }
    

    您正在实例化一个新的ArrayList,它以空开头,然后尝试遍历空列表,而您的 for 循环将不会运行。

    如果您只需要数字列表,请尝试以下操作:

    ArrayList<ListItem> items = new ArrayList<ListItem>();
      for(int i = 0; i < 100; i++) {
      int num = i + 1;
      ListItem l = new ListItem("Item " + num, "sub item " + num);
      items.add(l);
    }
    

    【讨论】:

    • 天啊,这么小的错误……我怎么没发现!它现在可以工作了,干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2012-06-15
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多