有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试为安卓 spinner定制一个样式,但是有几个问题。 我注意到在许多示例中,它们将数组传递给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) 个答案

  1. # 1 楼答案

    首先

    您正在使用默认的ArrayAdapter

    new ArrayAdapter<String>();
    

    它使用String类进行数据绑定。如果你想用ArrayListList来制作ArrayAdapter,你必须通过扩展ArrayAdapter<Custom_Class>BaseAdapter来制作一个自定义适配器

    ArrayAdapter类可以处理任何Java对象作为输入。它将此输入的数据映射到布局中的文本视图

    ArrayAdapter使用数据输入对象的toString()方法来确定应该显示的字符串

    看看How to use ArrayAdapter<myClass>和这个Tutorial

    更新:

    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
       .
       .
       .
    
  2. # 2 楼答案

    这是正确的解决方案

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

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