我想创建包含不同类型项目的列表。他们应该调用不同的意图或做其他事情(显示地图等)。它应该像联系方式一样。项目和操作的数量是预定义的。
如何优雅地达到这个效果?我不需要确切的代码,但需要指导和信息。任何帮助将不胜感激:)
更新:
“this effect”是指创建不同类型项目的列表(onClickListener,layout)。在上面的图片中,您可以看到您有各种选项的联系人:呼叫某人,通过电子邮件发送,聊天,查看谷歌地图等。所有这些选项都列在列表中。
我想知道是否可以通过xml布局实现,而无需定义自定义Adapter
类。我也希望能够添加一些静态标题行,例如。类别名称。
答案 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事件,再次对对象的类进行过滤。