列表视图的OnItemClick事件取决于我点击的位置

时间:2015-05-28 11:29:48

标签: android listview

我的ListView看起来像这样:

listview

每个列表元素由具有两个图像按钮和textview的相对布局组成。

现在单击每个列表元素会突出显示列表元素的背景(相对布局背景)。这是使用onItemClickListener回调完成的。但是,单击列表视图上的任何位置仍会触发回调并更改背景颜色。   有办法:

  1. 如果我单击图像按钮,其中一个将是upvote,一个将downvote以某种方式处理此事件不同?具体而不是改变整个列表元素的背景我想只需要upvote按钮来回复

  2. 如果我点击列表元素中的任何其他位置(不包括两个按钮),我希望onItemClick事件通常会更改整个列表元素的背景。

  3. 现在的听众:

    public class TsClickListener implements AdapterView.OnItemClickListener {
    
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            view.setSelected(true);
        }
    }
    

3 个答案:

答案 0 :(得分:2)

为View设置两个单独的onClickListener(),像这样设置ImageButton,

对于ImageView,

ImageButton iv = view.findViewById(R.id.ivHello);
iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //ImageButton is now clicked
            }
        });

对于您的常规视图,

 view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //View is now clicked
            }
        });

答案 1 :(得分:2)

尝试此操作

select DATEDIFF (day,'(select O.VALUE1 
from TABLE1 O 
where O.VALUE1 = 16650476)' , 
               '(SELECT C.VALUE1 
                 from TABLE1 O, TABLE2 C 
                 WHERE O.VALUE1 = C.VALUE2 AND O.order_id = 12345678)') AS DIFFDATE; 

答案 2 :(得分:1)

如果要对图像按钮和列表元素使用相同的onClickListener,可以在onClickListener中使用instanceof运算符,这样就可以区分是否单击了ImageButton或TextView。

public class TsClickListener implements AdapterView.OnItemClickListener {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if(view instanceof ImageButton) {
            // upvote/downvote stuff
        }
        else if(view instanceof TextView) {
            view.setSelected(true);
        }
    }
}