ListView中的TextView和Button - OnClick工作,OnItemClick不起作用

时间:2014-07-09 17:20:01

标签: android listview android-listview onclick onitemclick

更新

我的按钮与每个ListItem的视图一样大 - 可能这会导致问题?是否可以按一次,让OnItemclick和OnClick都响应?


我有一个带有两个textview和一个按钮的列表视图。我知道有很多问题要发布,但我已经阅读了很多问题而且似乎没有一个问题可以解决。

我希望列表视图的每个视图的OnItemClick都能正常工作。 我还希望列表视图的每个视图中的按钮的OnClick都能正常工作。

只有按钮的onClick似乎响应

在我的xml中,我为按钮设置了android:focusable="false"。对于我设置android:textIsSelectable="false" android:clickable="false" android:focusable="false"

的观看文字
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/rectangle_order"
    android:layout_gravity="center_horizontal"
    >
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="@dimen/order_height"
    >

        <Button
            android:id="@+id/img"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:focusable="false"
            />


        <TextView
            android:id="@+id/txt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:textStyle="bold"
            android:textSize="@dimen/text_size"
            android:textColor="@color/white"
            android:rotation="90"
            android:textIsSelectable="false"
            android:clickable="false"
            android:focusable="false"
            />

        <TextView
            android:id="@+id/timer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textSize="@dimen/timer_size"
            android:rotation="90"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_marginBottom="29dp"
            android:textIsSelectable="false"
            android:clickable="false"
            android:focusable="false"
            />
</RelativeLayout>
</RelativeLayout>

这是我的列表视图的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_weight="0.5"
    android:layout_width="@dimen/order_height"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:orientation="vertical"
    >

    <ListView
        android:id="@+id/list"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="0.5"
        android:divider="@android:color/transparent"
        android:dividerHeight="10.0sp"
        android:scrollbars="none"
        >
    </ListView>

</RelativeLayout>

在我的适配器的GetView中,我有:

 Button b = (Button) rowView.findViewById(R.id.img);
    b.setBackgroundResource(R.color.pending);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(numberOfTimers < 2){
                view.setBackgroundResource(R.color.ongoing);
                countDownTimer = new MyCountDownTimer(TIME_PANINI, 1000,timerTextView, view);
                countDownTimer.start();
            }
        }
    });

在我的主要活动中,我将onItemClickListener设置为listView:

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.d(TAG_MAIN, "we are in select onitemclicklistener");
                Toast.makeText(getApplicationContext(),"BOOOOH", Toast.LENGTH_SHORT).show();
            }
        });

1 个答案:

答案 0 :(得分:0)

尝试用OnTouchListener替换OnClickListener。

像这样:

b.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        if (event.getAction()==MotionEvent.ACTION_DOWN){
            if(numberOfTimers < 2){
                view.setBackgroundResource(R.color.ongoing);
                countDownTimer = new MyCountDownTimer(TIME_PANINI, 1000,timerTextView, view);
                countDownTimer.start();
            }
        }
        return false;
    }
};);

当你在这个监听器上返回false时,你的意思是“嘿,我没有完成那个动作(按下),请让动作进入下一个视图”