列表视图中的不同项目

different items in listview

我正在尝试创建一个包含不同项目的列表视图。我想使用 switch 语句来执行此操作,但我正在努力制作它 我已经使用一个 XML 布局创建了它 我如何使用多个 XML 布局。我附上了我的代码 - 提前谢谢你!

public class MainActivity extends Activity {

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

        this.generateDummyData();

        ListView listView = (ListView) this.findViewById(R.id.postListView);
        final PostItemAdapter itemAdapter = new PostItemAdapter(getApplicationContext(), this.generateDummyData());


        listView.setAdapter(itemAdapter);

    }

    private ArrayList<PostData> generateDummyData() {
        PostData data = null;
        ArrayList<PostData> listData = new ArrayList<PostData>();
        for (int i = 0; i < 20; i++) {
            data = new PostData();
            data.postTitle = "Person " + (i + 1)
                    + " Name Surname";
            data.postThumbUrl = null;
            listData.add(data);
        }

        return listData;
    }

    // Get dummy data for Activity Feed

    class PostDataTask extends AsyncTask<Integer, Void, Void> {

        ArrayList<PostData> recentTracks;

        @Override
        protected Void doInBackground(Integer... page) {
            try {
                // Get a page of 15 tracks
                // Simplified - getPage accepts 'page' and 'limit' parameters and returns a Collection<Track>
                recentTracks = new ArrayList<PostData>();

                Thread.sleep(3000);

                PostData data = null;
                for (int i = 0; i < 10; i++) {
                    data = new PostData();
                    data.postTitle = "Person " + (i + 1)
                            + " Name  is the Post Title from RSS Feed";
                    data.postThumbUrl = null;
                    recentTracks.add(data);
                }
            } catch (Exception e) {
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            ListView listView = (ListView) findViewById(R.id.postListView);
            PostItemAdapter adapter = ((PostItemAdapter) ((HeaderViewListAdapter) listView.getAdapter()).getWrappedAdapter());

            if (adapter == null) {
                adapter = new PostItemAdapter(getApplicationContext(), recentTracks);
                listView.setAdapter(adapter);
            } else {
                adapter.addAll(recentTracks);
                adapter.notifyDataSetChanged();
            }
        }


    }


    public class PostItemAdapter extends ArrayAdapter<PostData> {
        private final Context context;
        private final ArrayList<PostData> items;
        private int currentPage = 0;

        public PostItemAdapter(Context context, ArrayList<PostData> recentTrackArrayList) {
            super(context, 0, recentTrackArrayList);
            this.context = context;
            this.items = recentTrackArrayList;
        }


        public View getView(int position, View convertView, ViewGroup parent) {
            View rowView;

            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


                convertView = inflater.inflate(R.layout.postitem,
                        parent, false);
            }

            final PostData item = items.get(position);

            rowView = convertView;
            ImageView thumbImageView = (ImageView) rowView
                    .findViewById(R.id.postThumb);
            if (items.get(position).postThumbUrl == null) {
                thumbImageView.setImageResource(R.drawable.postthumb_loading);
            }

            TextView postTitleView = (TextView) rowView
                    .findViewById(R.id.postTitleLabel);
            postTitleView.setText(items.get(position).postTitle);

            if (position == getCount() - 1) {
                currentPage++;
                new PostDataTask().execute(currentPage);
            }

            return convertView;
        }

    }


}

如果您的项目完全不同,则使用 view holder 模式将不起作用。

对于每个项目,您需要检查要显示的项目类型并根据它展开不同的视图(例如,使用您所说的 switch

首先 使用ViewHolder 模式。

生成 interfase of Item 将包括两种方法:

  • getType() - return 您的商品类型;

  • getView(LayoutInflater inflater, View convertView) - return 行的视图。在此方法中创建 ViewHolder 实例,然后将 View 参数膨胀为 VH 并在结果视图中执行一些操作。

。然后创建 2(或者你需要多少)类 来实现 Item。定义方法。然后在 ListAdaptergetView() 中调用 getView() 项并将其 return 列出。