Android getView设置带位置的侦听器时出现问题
我有一个Android getView设置带位置的侦听器时出现问题,android,listview,Android,Listview,我有一个列表视图,带有一个适配器,它使用LruCache,就像它的ViewHolder一样。我正试图从getView()内的缓存中检索视图,并设置onlongclicklister。然而,尽管我付出了努力,我似乎每次都能得到缓存中的最后一个索引 适配器 private class MyAdapter extends BaseAdapter { private LruCache<Integer, View> mViewCache; private Con
列表视图
,带有一个适配器
,它使用LruCache
,就像它的ViewHolder一样。我正试图从getView()
内的缓存中检索视图
,并设置onlongclicklister
。然而,尽管我付出了努力,我似乎每次都能得到缓存中的最后一个索引
适配器
private class MyAdapter extends BaseAdapter {
private LruCache<Integer, View> mViewCache;
private Context mContext;
private LayoutInflater mInflater;
private MyAdapter(Context context) {
mContext = context;
mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mViewCache = new LruCache<Integer, View>(10);
}
private View inflateMyView(ViewGroup parent, View view) {
view = mInflater.inflate(R.layout.my_row, null);
return view;
}
因此,正如您现在看到的,我的onLongClickListener
仅适用于我添加到列表中的最后一项(缓存中的最后一个索引)。我需要列表中的每个项目都附加此侦听器
,而不仅仅是最后一个。谢谢你的帮助,我已经盯着这个太久了
编辑(供参考)
由于此代码的紧密耦合特性,onLongClickListener
必须保留在getView
中。这就是为什么我如此沮丧。如果必须移动它,它将成为一个完全不同的解决方案删除视图。在getView
方法中设置OnLongClickListener(新的OnLongClickListener()
,并让它返回convertView
。在为列表视图设置适配器后设置OnLongClickListener
:
listView.setAdapter(new MyAdapter(this));
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
return false;
}
});
listView.setAdapter(新的MyAdapter(this));
setOnItemLongClickListener(新的OnItemLongClickListener(){
@凌驾
长单击(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
//TODO自动生成的方法存根
返回false;
}
});
你的getView
在MyAdapter
类中吗?@ZhenxiaoHao是的,不幸的是我将我的侦听器设置在getView中。大部分代码是紧密耦合的,我缺乏知识和时间来对父元素执行所需的深度重构。+1这是一个很好的解决方案,但是因为这段代码是c耦合侦听器必须保留在getView()
中。这就是我遇到如此多问题的原因。使此解决方案工作所需的重构量太大了。不过,感谢您的努力。
listView.setAdapter(new MyAdapter(this));
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
return false;
}
});