定制适配器问题。

时间:2011-07-28 20:18:03

标签: android android-layout android-widget

我正在尝试构建一个包含checkBox,Textview和图像的ListView,这应该在行中重复为可滚动列表。

我关注Android hello-listview tutorial,但在自定义xml文件并引用它时出错:

setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));

我确信,我需要一个自定义适配器,可以将每个国家/地区名称放在相应的行中,但无法理解如何执行此操作。你能帮帮我吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

以下是创建包含多个数据的自定义ListView行所需的高级步骤。

  1. 创建一个类来保存每行所需的数据。在这种情况下,它似乎是一个布尔值,一个字符串,以及一个可绘制的drawable或id。我们称这个类为Foo。
  2. 为列表行创建自定义布局xml文件(在下面改编为custom_list_layout)
  3. 创建一个名为FooAdapter的自定义适配器,它将在其构造函数中列出Foos。

  4. 在FooAdapter的getView()方法中,您将为此行充气自定义视图,按ID查找所有元素,并用Foo中的数据填充它们。像这样:

    公共类FooAdapter扩展了ArrayAdapter {

    private List<Foo> foos;
    
    public FooAdapater(Context ctx, int textViewResourceId, ArrayList<Foo> items) {
        super(ctx, textViewResourceId, items);
        this.foos = items;
    }
    
    @Override
    public View getView(int pos, View view, ViewGroup parent) {
        final LayoutInflater inflater = parent.getLayoutInflater();
        final View entry = inflater.inflate(R.layout.custom_list_layout, null);
        Foo foo = foos.get(position);
        TextView tv = (TextView) entry.findViewById(R.id.custom_layout_text_view);
        tv.setText(foo.getTitle());
            // do the same for the checkbox and image
        return v;
    }
    

    }

  5. 最后,在您的Activity中实例化此适配器,而不是传递List中的“new ArrayAdapter”。