newday
newday

Reputation: 3878

Passing a list to a custom view?

I am trying to make a custom style for android spinner, however there are several problems. I have noticed in many examples, they pass array to getCustomView method. I am wondering whether I can pass a list instead of an array.

Second problem is why they have declared variable and initialized in class variable scope? They have declared arrays like this.

String []data1={"Brainbitz:java","Brainbitz:Android","Brainbitz:Embedded Systems","Brainbitz:PHP"};

in class variable scope. But when I try to do for the list I get an error. why?

Third is,

If we can pass list to getCustomView how do I do that? Here is the link to the tutorial tutorial

I am considering this source code.

 public View getCustomView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater=getLayoutInflater();
            View row=inflater.inflate(R.layout.spinner, parent, false);
            TextView label=(TextView)row.findViewById(R.id.textView1);
            label.setText(list3.get(position));

//            TextView sub=(TextView)row.findViewById(R.id.textView2);
//            sub.setText(data2[position]);
//
//            ImageView icon=(ImageView)row.findViewById(R.id.imageView1);
//            icon.setImageResource(images[position]);

            return row;
            }

In above code I don't know the syntax to pass position to list3 list type reference.

Please be kind enough to explain this.

Upvotes: 1

Views: 587

Answers (2)

newday
newday

Reputation: 3878

Here is the corrected solution,

public class MyAdapter extends ArrayAdapter<String>
    {

        public MyAdapter(Context context, int textViewResourceId,List<String> objects) {
              super(context, textViewResourceId, objects);
              // TODO Auto-generated constructor stub
        }
            @Override
        public View getDropDownView(int position, View convertView,ViewGroup parent) {
            return getCustomView(position, convertView, parent);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return getCustomView(position, convertView, parent);
        }

        public View getCustomView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater=getLayoutInflater();
            View row=inflater.inflate(R.layout.spinner, parent, false);
            TextView label=(TextView)row.findViewById(R.id.textView1);
            label.setText(list3.get(position));

//            TextView sub=(TextView)row.findViewById(R.id.textView2);
//            sub.setText(data2[position]);
//
//            ImageView icon=(ImageView)row.findViewById(R.id.imageView1);
//            icon.setImageResource(images[position]);

            return row;
            }

   }

Basiclly, I had done 1 mistake, one is I hadnt initalised constructor correctly.

Upvotes: 0

user370305
user370305

Reputation: 109237

First of All,

You are using default ArrayAdapter Class..

new ArrayAdapter<String>();

Which Uses String class for data bind. If you want to make an ArrayAdapter with a ArrayList or List you have to make a Custom Adapter by extending ArrayAdapter<Custom_Class> or BaseAdapter.

The ArrayAdapter class can handle any Java object as input. It maps the data of this input to a TextView in the layout.

ArrayAdapter uses the toString() method of the data input object to determine the String which should be displayed.

Look at How to use ArrayAdapter<myClass> and this Tutorial

Update:

public class MyAdapter extends ArrayAdapter<String>
{
  private List<String> listString = new ArrayList<String>();

  public MyAdapter(Context context, int textViewResourceId,
                        List<String> objects) {
  super(context, textViewResourceId, objects);
  // TODO Auto-generated constructor stub
  listString  = objects;
  }

  public View getCustomView(int position, View convertView, ViewGroup parent) {

   LayoutInflater inflater=getLayoutInflater();
   View row=inflater.inflate(R.layout.spinner, parent, false);
   TextView label=(TextView)row.findViewById(R.id.textView1);
   label.setText(listString.get(position)); // How to use listString
   .
   .
   .

Upvotes: 2

Related Questions