我们可以在单个ListActivity中拥有2种不同类型的自定义视图

时间:2011-07-24 17:41:48

标签: android

我试图模仿

enter image description here

通过为ArrayAdapter编写我自己的自定义视图(以显示单个股票信息)。

custom_row_view.xml

// OrderAdapter is derived from ArrayAdapter.
OrderAdapter orderAdapter = new OrderAdapter(this, 
    R.layout.custom_row_view, new ArrayList<Object>());

OrderAdapter的代码如下。

public class OrderAdapter extends ArrayAdapter<TransactionSummary> {

    public OrderAdapter(Context context, int textViewResourceId,
            List<TransactionSummary> objects) {
        super(context, textViewResourceId, objects);
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        if (row == null) {
            LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.custom_row_view, parent, false);
        }        
    }
}

enter image description here

但是在ArrayAdapter的构造函数中,它只接受1种类型的自定义视图。因此,我不知道如何在这个列表的末尾适应另一种类型的自定义视图(显示所有股票摘要的总数)。

我是否知道如何为单个ListActivity提供2种不同的自定义视图?

3 个答案:

答案 0 :(得分:2)

您可以将视图ID传递给Array到ArrayAdapter的构造函数。然后,您需要覆盖几个方法:

  • getViewTypeCount()返回您拥有的视图类型数(2,在您的情况下)
  • getItemViewType()返回给定项的视图类型。请注意,这可能会令人困惑:您不会在此处返回布局ID,而是在0和getViewTypeCount()之间返回一个数字。
  • getView()创建并返回视图

http://http://developer.android.com/reference/android/widget/BaseAdapter.html阅读有关BaseAdapter的帮助以获取更多信息。如果您需要其他帮助,请回复。

- 好色

答案 1 :(得分:0)

如果你OrderAdapter orderAdapter = new OrderAdapter(this, R.layout.second_custom_row_view, new ArrayList<Object>());,那么你可能会有另一个自定义行视图。但如果你的意思是同时拥有它们。也许你应该一个接一个地做上面的事情,如果这可能不仅仅是理论上的。

答案 2 :(得分:-2)

在自定义适配器的getView()方法中,您可以为列表中的特定对象扩展不同的布局。

您很可能会通过以下方式执行此操作:

    public View getView(int position, View convertView, ViewGroup parent){
        if(convertView==null){
             if(myObjects.get(position).isCustom()
                 convertView=inflate(R.layout.custom);
             else
                 convertView=inflate(R.layout.regular);
        }
        //update views...
    }

希望这是你正在寻找的。