Java 如何通过自定义适配器将项目的ArrayList填充到ListView?

Java 如何通过自定义适配器将项目的ArrayList填充到ListView?,java,android,listview,arraylist,Java,Android,Listview,Arraylist,我有一个项目的ArrayList,每个项目包含2个字符串和1个按钮。当我使用列表存储项目时,它工作得很好。在我更改为ArrayList来存储项目之后,emulator显示了一个空屏幕 主要活动: public class MainActivity extends AppCompatActivity { public void mainlist(){ ArrayList<ListItem> items = new ArrayList&

我有一个项目的ArrayList,每个项目包含2个字符串和1个按钮。当我使用列表存储项目时,它工作得很好。在我更改为ArrayList来存储项目之后,emulator显示了一个空屏幕

主要活动:

    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;
        }
    }

如果没有数据,如何生成列表项

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);
    }

为什么不继续使用列表界面呢?或者更好地迁移到回收器视图。您的代码几乎与此代码路径中的代码完全相同,只是它使用getItem而不是成员列表变量。我认为变化不应该引起这样的问题。是否确定已正确指定和读取对象?我刚刚更改为getItem以匹配代码路径,但它仍然不起作用:天哪,这么小的错误……我怎么可能没有找到它!现在开始工作了,干杯!
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);
    }