如何创建包含不同元素和操作的列表?

时间:2010-09-29 20:00:55

标签: android list android-intent

我想创建包含不同类型项目的列表。他们应该调用不同的意图或做其他事情(显示地图等)。它应该像联系方式一样。项目和操作的数量是预定义的。

conact dteails

如何优雅地达到这个效果?我不需要确切的代码,但需要指导和信息。任何帮助将不胜感激:)


更新:

“this effect”是指创建不同类型项目的列表(onClickListener,layout)。在上面的图片中,您可以看到您有各种选项的联系人:呼叫某人,通过电子邮件发送,聊天,查看谷歌地图等。所有这些选项都列在列表中。

我想知道是否可以通过xml布局实现,而无需定义自定义Adapter类。我也希望能够添加一些静态标题行,例如。类别名称。

1 个答案:

答案 0 :(得分:3)

我看到实现这一目标的唯一方法是确实创建一个自定义适配器类。 我正在使用它来创建文件浏览器,基于所选项目是文件或文件夹,具有不同的操作。

基本上,您需要创建一个扩展ArrayAdapter的自定义适配器(如果所有项都从同一个类继承,则可以使用另一个基类)。这是一个示例代码:

public class MyCustomAdapter extends ArrayAdapter<Object> {


    public MyCustomAdapter(Context context, int textViewResourceId,
            ArrayList<Object> objects) {
        super(context, textViewResourceId, objects);
        mList = objects;
    }


    public View getView(int position, View convertView, ViewGroup parent) {
        Object obj = mList.get(position);
        View v = convertView;
        LayoutInflater vi = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


        if (obj.getClass().isAssignableFrom(MyClass1.class)){
            v = vi.inflate(R.layout.myclass1_item_layout, null);
            setupViewClass1(obj,v);
        } else if (obj.getClass().isAssignableFrom(MyClass2.class)){
            v = vi.inflate(R.layout.myclass2_item_layout, null);
            setupViewClass2(obj,v);
        }

        return v;
    }

    private void setupViewClass1 (Object obj, View v){  
        // setup the content of your view (labels, images, ...)
    }

    private void setupViewClass2 (Object obj, View v){  
        // setup the content of your view (labels, images, ...)
    }

    private ArrayList<Object> mList;

}

然后,您需要添加一个OnItemClickListener以及一个OnCreateContextMenuListener来处理列表中的click和longpress事件,再次对对象的类进行过滤。