Estoy intentando crear una vista de lista con diferentes elementos dentro de ella. Quiero usar una declaración de cambio para hacer esto, pero estoy luchando para producir esto. He creado esto con un diseño XML, ¿cómo puedo usar varios diseños XML? He adjuntado mi código, ¡gracias de antemano!

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

    }


}
-1
Sim 2 feb. 2015 a las 20:35

1 respuesta

Usar el patrón view holder no funcionará si sus artículos son completamente diferentes.

Para cada elemento, debe verificar qué tipo de elemento desea mostrar e inflar una vista diferente dependiendo de él (por ejemplo, usando un switch como dijo)

0
Antonio MG 2 feb. 2015 a las 17:53