我可以获取在列表适配器中单击的项目的子视图

时间:2013-09-25 01:15:46

标签: android android-listview android-arrayadapter

我想将一个通用的onitemclicklistener附加到一个数组列表中,列表视图的每一行中有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());

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

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

1 个答案:

答案 0 :(得分:0)

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

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

Motion Event | Android Developers