Adding ArrayList Objects to GridView in Android

前端 未结 1 1174
孤独总比滥情好
孤独总比滥情好 2021-01-24 12:40

Hello I\'m working on a project where I have to insert each object of type \"Person\" in an ArrayList of type \"Person\" to a Gridview in eclipse android. My intentions are to d

相关标签:
1条回答
  • 2021-01-24 13:40

    your adapter

     public class Benildus_Adapter extends ArrayAdapter<Person> {
    
    ArrayList<Person> list; // your person arraylist
    Context context; // the activity context
    int resource; // this will be your xml file
    
    public Benildus_Adapter(Context context, int resource,ArrayList<Person> objects) {
        super(context, resource, objects);
        // TODO Auto-generated constructor stub
        this.list = objects;
        this.context = context;
        this.resource = resource;
    }
    
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        if(list.size() == 0){
            return 0;
        }else{
            return list.size();
        }
    }
    
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View child = convertView;
        RecordHolder holder;
        LayoutInflater inflater = ((Activity) context).getLayoutInflater(); // inflating your xml layout
    
        if (child == null) {            
            child = inflater.inflate(resource, parent, false);
            holder = new RecordHolder();
            holder.fname = (TextView) child.findViewById(R.id.fname); // fname is the reference to a textview
            holder.lname = (TextView) child.findViewById(R.id.lname); // in your xml layout file 
            holder.bio =(TextView) child.findViewById(R.id.bio); // you are inflating.etc
            child.setTag(holder);
        }else{
            holder = (RecordHolder) child.getTag();
        }
    
        final Person user = list.get(position); // you can remove the final modifieer.
    
        holder.fname.setText(user.getFName());      
        holder.lname.setText(user.getLName());
        holder.bio.setText(user.getBiography());
        holder.image.setImageBitmap(user.getImage()); // if you use string then you download the image using
        // the string as url and set it to your imageview..
        return child;
    }
    
    static class RecordHolder {
        TextView fname,lname,bio;
        ImageView image;    
    }
    
    
    @Override
    public void notifyDataSetChanged() { // you can remove this..
        // TODO Auto-generated method stub      
        if(getCount() == 0){
            //show layout or something that notifies that no list is in..
        }else{
            // this is to make sure that you can call notifyDataSetChanged in any place and any thread
            new Handler(getContext().getMainLooper()).post(new Runnable() {
    
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    Benildus_Adapter.super.notifyDataSetChanged();
                }
            });
        }
    }
    
    } 
    

    your person class

     public class Person {
    
    private String FName;
    private String LName;
    private String Biography;
    private Bitmap image; // add the image too to your class, you can store the url of the image 
    // or save it using bitmap.. if you store the url then = String image; the load the image
    // in the getview method.. any way you choose..
    public String getFName() {
        return FName;
    }
    public void setFName(String fName) {
        FName = fName;
    }
    public String getLName() {
        return LName;
    }
    public void setLName(String lName) {
        LName = lName;
    }
    public String getBiography() {
        return Biography;
    }
    public void setBiography(String biography) {
        Biography = biography;
    }
    public Bitmap getImage() {
        return image;
    }
    public void setImage(Bitmap image) {
        this.image = image;
    }
    
    }
    

    Edit i just forget the set adapter..

     gridView = (GridView)findViewById(R.id.grid);
     Benildus_Adapter bA = new Benildus_Adapter(this, R.layout.myxml,dbPersons);
     gridView.setAdapter(bA);
    

    hope it helps, let me know

    0 讨论(0)
提交回复
热议问题