0

I am trying to make a custom adapter for listview. I've used ArrayList for storing objects of 'CustomListDataModel' class. But when I set Image or textview resources in 'getView()' Such as

viewHolder.image_view.setImageResources(customListDataModelArrayList.get(pos).getImage_id());

showing that getImage_id() is 'cannot resolve'. This is my problem. getImage_id() method that I set as a getter in 'CustomListDataModel' for specifying my problem clearly here is my code:

 public class MainActivity extends AppCompatActivity {

    ListView list_view;
    CustomListAdapter customListAdapter;
    ArrayList <CustomListDataModel> customListDataModelArrayList =new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        PopulateData();
        initView();
    }

    public void initView(){
        list_view = (ListView) findViewById(R.id.list_view);
        customListAdapter = new CustomListAdapter(MainActivity.this, customListDataModelArrayList);
        list_view.setAdapter(customListAdapter);
    }

    public void PopulateData(){

        for (int i=0;i<10;i++){

            CustomListDataModel customListDataModel = new CustomListDataModel();
            switch (i)
            {
                case 0:
                    customListDataModel.setImageName("Angry Bird Red");
                    customListDataModel.setImage_id(R.drawable.angry_bird);
                    customListDataModel.setImageDiscription("Angry Bird is red in color");
                    break;

                case 1:
                    customListDataModel.setImageName("Angry Bird Black");
                    customListDataModel.setImage_id(R.drawable.angry_bird);
                    customListDataModel.setImageDiscription("Angry Bird is black in color");
                    break;

                case 2:
                    customListDataModel.setImageName("Angry Bird Blue");
                    customListDataModel.setImage_id(R.drawable.angry_bird);
                    customListDataModel.setImageDiscription("Angry Bird is blue in color");
                    break;

                case 3:
                    customListDataModel.setImageName("Angry Bird Red");
                    customListDataModel.setImage_id(R.drawable.angry_bird);
                    customListDataModel.setImageDiscription("Angry Bird is red in color");
                    break;

                case 4:
                    customListDataModel.setImageName("Angry Bird Black");
                    customListDataModel.setImage_id(R.drawable.angry_bird);
                    customListDataModel.setImageDiscription("Angry Bird is black in color");
                    break;
                case 5:
                    customListDataModel.setImageName("Angry Bird Blue");
                    customListDataModel.setImage_id(R.drawable.angry_bird);
                    customListDataModel.setImageDiscription("Angry Bird is blue in color");
                    break;

                case 6:
                    customListDataModel.setImageName("Angry Bird Green");
                    customListDataModel.setImage_id(R.drawable.angry_bird);
                    customListDataModel.setImageDiscription("Angry Bird is green in color");
                    break;

                case 7:
                    customListDataModel.setImageName("Angry Bird Yellow");
                    customListDataModel.setImage_id(R.drawable.angry_bird);
                    customListDataModel.setImageDiscription("Angry Bird is yellow in color");
                    break;

                case 8:
                    customListDataModel.setImageName("Angry Bird White");
                    customListDataModel.setImage_id(R.drawable.angry_bird);
                    customListDataModel.setImageDiscription("Angry Bird is white in color");
                    break;

                case 9:
                    customListDataModel.setImageName("Angry Bird Red");
                    customListDataModel.setImage_id(R.drawable.angry_bird);
                    customListDataModel.setImageDiscription("Angry Bird is white in color");
                    break;
            }
            customListDataModelArrayList.add(customListDataModel);

        }

    }
}


public class CustomListDataModel {
    private String ImageName="";
    private String ImageDiscription;
    private int Image_id;

    public String getImageName() {
        return ImageName;
    }

    public void setImageName(String imageName) {
        ImageName = imageName;
    }

    public String getImageDiscription() {
        return ImageDiscription;
    }

    public void setImageDiscription(String imageDiscription) {
        ImageDiscription = imageDiscription;
    }

    public int getImage_id() {
        return Image_id;
    }

    public void setImage_id(int image_id) {
        Image_id = image_id;
    }


}

public class CustomListAdapter extends  BaseAdapter{

    Activity activity;
    ArrayList customListDataModelArrayList = new ArrayList<>();
    LayoutInflater layoutInflater = null;

    public CustomListAdapter(Activity activity, ArrayList customListDataModelArrayList){
        this.activity=activity;
        this.customListDataModelArrayList = customListDataModelArrayList;
        layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }


    @Override
    public int getCount() {
        return customListDataModelArrayList.size();
    }

    @Override
    public Object getItem(int i) {
        return customListDataModelArrayList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    public static class ViewHolder{
        ImageView image_view;
        TextView tv_name,tv_discription;

    }
    ViewHolder viewHolder = null;


    // this method  is called each time for arraylist data size.
    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {


        View vi=view;
        final int pos = position;
        if(vi == null){

            // create  viewholder object for list_rowcell View.
            viewHolder = new ViewHolder();

            vi = layoutInflater.inflate(R.layout.list_rowcell,null);
            viewHolder.image_view = (ImageView) vi.findViewById(R.id.image_view);
            viewHolder.tv_name = (TextView) vi.findViewById(R.id.tv_name);
            viewHolder.tv_discription = (TextView) vi.findViewById(R.id.tv_discription);

            vi.setTag(viewHolder);
        }else {


            viewHolder= (ViewHolder) vi.getTag();
        }

        viewHolder.image_view.setImageResource(customListDataModelArrayList.get(pos).getImage_id());
        viewHolder.tv_name.setText(customListDataModelArrayList.get(pos).getImageName());
        viewHolder.tv_discription.setText(customListDataModelArrayList.get(pos).getImageDiscription());


        return vi;
    }
}
Pradnya Bolli
  • 1,915
  • 1
  • 19
  • 37
  • Possible duplicate of [What is a raw type and why shouldn't we use it?](https://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it) – luk2302 Apr 30 '19 at 09:12

1 Answers1

0

Inside your CustomListAdapter you should declare the type of the ArrayList so you have access to the item methods.

 ArrayList<CustomListDataModel> customListDataModelArrayList;

or you can use an down cast for that issue

((CustomListDataModel)customListDataModelArrayList.get(pos)).getImage_id();


Zubty
  • 369
  • 2
  • 18