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;
        }

});