listview的项目点击监听器如果有复选框则无效

时间:2014-05-20 07:02:55

标签: android

enter image description here

这是我的列表,带有复选框和3个textviews。

这是listview的适配器类:

   package android.virtus;

   import android.content.Context;
   import android.view.LayoutInflater;
   import android.view.View;
   import android.view.ViewGroup;
   import android.widget.BaseAdapter;
   import android.widget.CheckBox;
   import android.widget.TextView;

public class Adapter extends BaseAdapter{

private Context context;

LayoutInflater inflater;

CheckBox box;
String textView1[], textView2[], textView3[];


public Adapter(Context c, CheckBox cb, String textView1[], String textView2[], String textView3[]) {

    this.context=c;
    this.box=cb;
    this.textView1=textView1;
    this.textView2=textView2;
    this.textView3=textView3;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return textView1.length;
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public View getView(final int arg0, View arg1, ViewGroup arg2) {
    // TODO Auto-generated method stub



    View view=arg1;
    view=LayoutInflater.from(context).inflate(R.layout.list, null);
    view.setClickable(true);
    view.setFocusable(false);

    TextView tv1=(TextView)view.findViewById(R.id.tV1);
    TextView tv2=(TextView)view.findViewById(R.id.tV2);
    TextView tv3=(TextView)view.findViewById(R.id.tV3);

    tv1.setText(textView1[arg0]);
    tv2.setText(textView2[arg0]);
    tv3.setText(textView3[arg0]);

    return view;
}

}

这是我的适配器,我在我的活动中添加到listview。

这里我想在单击列表项时导航到另一个屏幕。当我将onItemClick监听器添加到列表时,但是没有点击listview。

请帮助。

我的list.xml:

 <?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" 
  android:background="#EBEAE8"
  >

 <CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" 
    android:focusable="false"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="10dp"/>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_gravity="center" 
    android:layout_marginLeft="10dp"
    android:layout_toRightOf="@+id/checkBox1">

    <TextView
        android:id="@+id/tV1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="text" 
        android:maxLines="1"
        android:textSize="14sp"
        android:textColor="#5e5d5c"/>

    <TextView
        android:id="@+id/tV2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="text"
        android:textStyle="bold"
        android:maxLines="2"
        android:textSize="14sp"
        android:textColor="#000000"
        />

</LinearLayout>

<TextView
    android:id="@+id/tV3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="text"
    android:layout_marginRight="10dp"
    android:textSize="14sp"
    android:textColor="#5e5d5c"
    android:layout_alignParentRight="true"
    android:layout_gravity="center"/>

活动类:

public class ReceivedRequests extends Activity
 {


String   URL="http://192.168.0.101/VirtusMobile/VirtusApi/UserRequest/GetMyRequests/hanan/false/true/false/false";
String Response;

Button back, btnSentRequest, btnNewRequest;
ListView listView;

CheckBox box;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.received_requests);


    back=(Button)findViewById(R.id.back);
    btnSentRequest=(Button)findViewById(R.id.btnSentRequest);
    btnNewRequest=(Button)findViewById(R.id.btnNewRequest);


    ReceiveTask task=new ReceiveTask();
    task.execute();


    listView=(ListView)findViewById(R.id.listView1);



    listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            Intent intent=new Intent(ReceivedRequests.this,RequestDetails.class);
            startActivity(intent);



        }
    });


  }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.received_requests, menu);
    return true;
  }

 }

修改

在我的案例中没有任何作用。

    android:descendantFocusability="blocksDescendants"

    android:focusable="false"

    android:focusableInTouchMode="false"

    view.setClickable(true);

    view.setFocusable(false);

    android:focusable="true" attribute in ListView of my xml

    or itemClickListener of ListView is also not working.

有任何解决方案吗?

4 个答案:

答案 0 :(得分:7)

布局中的更新复选框:

 <CheckBox
     android:id="@+id/checkBox1"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_gravity="center"
     android:layout_alignParentRight="true"
     android:focusable="false"
     android:focusableInTouchMode="false"
     android:layout_centerVertical="true"/>

答案 1 :(得分:1)

在您的复选框中添加android:focusable="false"。所以列表视图项将获得焦点而不是复选框。

答案 2 :(得分:0)

好的,让我告诉你,如果有任何类型的UI项目,那么你的列表视图onitemclicklistner将无法运行示例:checkbox,ImageButton,Button这些项目需要查看它 我关注的是什么观点 所以只需将复选框android:focusable="false"设置为false,然后它就能正常工作

答案 3 :(得分:0)

在复选框中添加 android:clickable="false"。它可以防止点击。