将列表传递给自定义视图?

时间:2013-01-04 09:35:32

标签: java android oop

我正在尝试为android微调器创建自定义样式,但是有几个问题。 我在很多例子中都注意到,它们将数组传递给getCustomView方法。我想知道我是否可以传递列表而不是数组。

第二个问题是为什么他们在类变量范围内声明变量并初始化? 他们已经声明了这样的数组。

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

在类变量范围内。但是当我尝试为列表做的时候,我得到一个错误。为什么呢?

第三是,

如果我们可以将列表传递给getCustomView我该怎么做?以下是教程tutorial

的链接

我在考虑这个源代码。

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

在上面的代码中,我不知道将位置传递给list3列表类型引用的语法。

请善意解释这一点。

2 个答案:

答案 0 :(得分:2)

首先,

您正在使用默认 ArrayAdapter类..

new ArrayAdapter<String>();

使用String类进行数据绑定。如果您想使用ArrayAdapterArrayList制作List,则必须通过展开ArrayAdapter<Custom_Class>或{{1}来制作自定义适配器 }。

BaseAdapter类可以处理任何Java对象作为输入。它将此输入的数据映射到布局中的TextView。

ArrayAdapter使用数据输入对象的ArrayAdapter方法来确定应显示的String。

查看How to use ArrayAdapter<myClass>和此Tutorial

<强>更新

toString()

答案 1 :(得分:0)

以下是更正的解决方案,

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

   }

基本上,我犯了1个错误,其中一个是我没有正确初始化构造函数。