0

我想将一个通用的 onitemclicklistener 附加到一个数组列表,listview 的每一行中有 3 个元素,我希望它们都可以点击,它们都做不同的事情。我想做这样的事情

自定义监听器

public OnItemClickListener customListener(){        
    OnItemClickListener listener = new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {          
            int viewId = view.getId();              
            Log.d(app.TAG,"position " + String.valueOf(position) + " id " + String.valueOf(id));                
            switch(viewId){
                case R.id.tvPromote:
                    //promote text view hit             
                    break;
               case R.id.tvComment:
                    //comment text view hit             
                    break;
            }               
        }
    };      
    return listener;
}

我之前在我的活动中这样设置

        feedArray = new ArrayList<Object>();
        feedAdapter = new FeedAdapter(this, feedArray);
        listFeed.setAdapter(feedAdapter);
        listFeed.setOnItemClickListener(customListener());

但是单击的视图始终只是整行的布局,我想单击特定的元素。

我知道我可以将 onviewclicklisteners 附加到数组适配器中的特定元素,但我需要访问 Activity 中的方法,这开始变得非常 hacky。

4

1 回答 1

0

点击是由父母监听器委托的onTouch,所以它们可以在那里被拦截。您需要的代码将根据您的项目而有所不同,但可以返回一个布尔值,让系统知道仍有未处理的事件需要处理。True会让它知道你已经消费了这个事件,以及false它是否仍然需要照顾。

使用默认源代码通常是您在这里保持一致性的最佳选择。 https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/GestureDetector.java

运动事件 | 安卓开发者

于 2013-09-25T02:12:58.457 回答