【问题标题】:How to create list with different elements and actions?如何创建具有不同元素和动作的列表?
【发布时间】:2011-04-19 00:43:51
【问题描述】:

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

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


更新:

“这种效果”是指创建不同类型项目的列表(onClickListener、布局)。在上图中,您可以看到您的联系人有各种选项:打电话、发电子邮件、聊天、查看谷歌地图等。所有这些选项都在列表中分组。

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

【问题讨论】:

  • 不清楚你不清楚的“这种效果”是什么。
  • 我更新了我的问题以解释我所说的“这种效果”是什么意思。希望这对你有帮助;)

标签: android list android-intent


【解决方案1】:

我认为实现这一点的唯一方法是创建一个自定义适配器类。 我正在使用它来创建文件浏览器,根据所选项目是文件还是文件夹来执行不同的操作。

基本上,您需要创建一个扩展 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 来处理列表上的单击和长按事件,再次对对象的类进行过滤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 2022-08-18
    • 2018-12-25
    • 2016-05-28
    • 2022-12-18
    • 2012-01-06
    相关资源
    最近更新 更多