列表视图中的不同项目

时间:2015-02-02 17:35:18

标签: android 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;
        }

    }


}

2 个答案:

答案 0 :(得分:0)

如果您的商品完全不同,则无法使用view holder模式。

对于每件商品,您需要检查要显示的商品类型,并根据需要对其他视图进行充气(例如,使用switch,如上所述)

答案 1 :(得分:0)

第一次使用ViewHolder模式。

interfase Item,其中包含两种方法:

  • getType() - 返回商品的类型;

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

。然后创建2个(或多少你需要的)类来实现Item。定义方法。然后在ListAdapter的{​​{1}}内调用getView()项,并将其返回列表。