How to add data to custom BaseAdapter for listView - Android

前端 未结 2 2029
萌比男神i
萌比男神i 2021-01-06 17:04

I have a custom BaseAdapter class that creates views for comments, usernames, and numbers. This BaseAdapter receives this information from An AsyncTask. The AsyncTask runs w

相关标签:
2条回答
  • 2021-01-06 17:33

    You try this :

    public class Comment {
    String username;
    String content;
    String number;
     }
    

    Class Adapter:

    public class CommentAdapter extends BaseAdapter {
    private List<Comment> listComment;
    private Context context;
    
    public CommentAdapter(List<Comment> listComment, Context context) {
        super();
        this.listComment = listComment;
        this.context = context;
    }
    
    @Override
    public int getCount() {
    
        return listComment.size();
    }
    
    @Override
    public Comment getItem(int position) {
        return listComment.get(position);
    }
    
    @Override
    public long getItemId(int arg0) {
        return 0;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater mInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = mInflater.inflate(R.layout.comment_item, null);
        }
    
        final TextView textViewUsername = (TextView) v
                .findViewById(R.id.comment_Username);
        final TextView textViewNumber = (TextView) v
                .findViewById(R.id.comment_number);
        final TextView textViewContent = (TextView) v
                .findViewById(R.id.comment_Content);
    
        final String username = listComment.get(position).getUsername();
        final String number= listComment.get(position).getNumber();
        String content = listComment.get(position).getContent();
    
        textViewUsername.setText(username);
        textViewNumber.setText(number);
    
        textViewContent.setText(content);
        return v;
    }
    
    }
    

    When you need to add new comment to list. just create new Comment and add to listComment(listComment.add(newComment)), after that, call adapter.notifyDataSetChanged();

    0 讨论(0)
  • 2021-01-06 17:45
    package com.example.baseadapter;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends Activity implements OnItemClickListener {
        public static final String[] title = new String[] {
                "image 1", "image 2", "image 3", "image 4"
        };
    
        public static final Integer[] images = {
                R.drawable.aa, R.drawable.bb, R.drawable.cc, R.drawable.cc, R.drawable.dd
        };
    
        ListView listview;
    
        List<RowItem> rowItems;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            rowItems = new ArrayList<RowItem>();
            for (int i = 0; i < title.length; i++) {
                RowItem item = new RowItem(images[i], title[i]);
                rowItems.add(item);
            }
            listview = (ListView)findViewById(R.id.listview);
            customBaseAdapter cba = new customBaseAdapter(this, rowItems);
            listview.setAdapter(cba);
            listview.setOnItemClickListener(this);
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            Toast.makeText(getApplicationContext(), "item selected", Toast.LENGTH_LONG).show();
        }
    
        public class customBaseAdapter extends BaseAdapter {
            Context context;
    
            List<RowItem> rowItem;
    
            public customBaseAdapter(Context context, List<RowItem> listItem) {
                this.context = context;
                rowItem = listItem;
                Log.d("const", "const");
            }
    
            @Override
            public int getCount() {
                Log.d("count", "count");
                return rowItem.size();
            }
    
            @Override
            public Object getItem(int arg0) {
                Log.d("item", "item");
                return rowItem.get(arg0);
            }
    
            @Override
            public long getItemId(int position) {
                Log.d("const", "item id");
                return rowItem.indexOf(getItem(position));
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                Log.d("const", "getview");
                LayoutInflater inflater = (LayoutInflater)context
                        .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                RowItem rowitem = (RowItem)getItem(position);
                TextView textForTitle;
                ImageView imgForImage;
                convertView = inflater.inflate(R.layout.inflate, null);
                textForTitle = (TextView)convertView.findViewById(R.id.textview);
                imgForImage = (ImageView)convertView.findViewById(R.id.imageview);
                textForTitle.setText(rowitem.getTitle());
                imgForImage.setImageResource(rowitem.getImageId());
    
                return convertView;
            }
        }
    
        public class RowItem {
            int imageId;
    
            String title;
    
            public RowItem(int imageId, String title) {
                this.imageId = imageId;
                this.title = title;
            }
    
            public int getImageId() {
                return imageId;
            }
    
            public void setImageId(int imageId) {
                this.imageId = imageId;
            }
    
            public String getTitle() {
                return title;
            }
    
            public void setStringTitle(String title) {
                this.title = title;
            }
    
            @Override
            public String toString() {
                return title;
            }
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题