我认为实现这一目标的唯一方法是创建一个自定义适配器类。
我使用它来创建一个文件浏览器,根据所选项目是文件还是文件夹来执行不同的操作。
基本上,您需要创建一个扩展 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 来处理列表上的单击和长按事件,再次对对象的类进行过滤。