2015-09-28 90 views
1

我用textview和複選框作爲listView的項目。我編寫的用於listview的代碼正常工作。但是,當我添加複選框到列表視圖onclicklistener事件現在不工作。我在XML文件中使用此代碼:爲什麼不在listView上工作onclicklistener?

我的XML代碼:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="5" > 

    <CheckBox 
     android:id="@+id/checkBox1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

    <TextView 
     android:id="@+id/textView_Item_Listview" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="4" 
     android:gravity="right" 
     android:padding="3dp" 
     android:textSize="25sp" /> 

</LinearLayout> 

我的Java代碼:

private class Adapter_collection extends ArrayAdapter<String> { 

    public Adapter_collection(Context context, int resource, int textViewResourceId, 
      String[] name_collection_tbl_collection) { 
     super(context, resource, textViewResourceId, name_collection_tbl_collection); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row = inflater.inflate(R.layout.listview_items, parent, false); 
     TextView txt_item_list_collection = (TextView) row.findViewById(R.id.textView_Item_Listview); 
     CheckBox checkBox=(CheckBox)row.findViewById(R.id.checkBox_Item_Listview); 

     checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      Toast.makeText(getApplicationContext(), String.valueOf(position), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     txt_item_list_collection.setText(name_collection_tbl_collection[position]); 
     return row; 
    } 

} 


list_collections.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
      Intent goTo_SubjectsActivity = new Intent(Collection_List_Activity.this, Subjects_Activity.class); 
      startActivity(goTo_SubjectsActivity); 
      Intent_values.id_collection = id_tbl_collection[arg2]; 
     } 
    }); 
+0

期待一些java代碼 ? – nobalG

+0

你的java代碼在哪裏? –

+2

可能重複的[android:無法點擊與imagebutton列表視圖行](http://stackoverflow.com/questions/11428303/android-cant-click-on-listview-row-with-imagebutton) –

回答

2

可能的原因是,如果你在你的List_itemtouchable elements,它會阻止list_item觸摸,所以onItemclickListener在你的ListView不會工作。 如果你想實現OnClickListener到你的ListView您可以在您添加

android:descendantFocusability="blocksDescendants" 

list_item父項裏面LinearLayout

+0

Rajan KS:我爲TextView和CheckBox設置了android:focusable =「false」和android:focusableInTouchMode =「false」。它解決了。謝謝您的回答 – programmer138200

1

嘗試將onclicklistener分配給TextView的,而不是名單。

private class Adapter_collection extends ArrayAdapter<String> { 

... 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View row = inflater.inflate(R.layout.listview_items, parent, false); 
      TextView txt_item_list_collection = (TextView) row.findViewById(R.id.textView_Item_Listview); 

      //add this 
      txt_item_list_collection.setOnClickListener(new OnClickListener() { ... }); 

      txt_item_list_collection.setText(name_collection_tbl_collection[position]); 
      return row; 
     } 

    } 
+0

謝謝您的回答。我想爲複選框實現setOnCheckedChangeListener(),並獲取此方法中複選框的位置。我像你的答案一樣實現但是得到了一個位置範圍的錯誤。你能指導我 – programmer138200

+1

你可以像使用'findViewById'一樣獲得對CheckBox的引用,然後只需向它添加一個監聽器。 –

+0

這是代碼,而不是錯誤消息? B.t.w.請將您的問題中的代碼作爲編輯發佈,我無法在此閱讀! –