2013-05-14 194 views
6

在這個ListView不可點擊的情況下,我想對項目點擊執行一個操作,但我不知道爲什麼這不是可點擊的,我也檢查了調試控制器沒有在itemclicklistener中消失。ListView項在Android中不可點擊

設計文件:

<?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:orientation="vertical" > 

<CheckBox 
    android:id="@+id/cbSolved" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="15dp" 
    android:layout_marginTop="20dp" 
    android:text="Show Solved" /> 

<CheckBox 
    android:id="@+id/cbMyCases" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/cbSolved" 
    android:layout_alignBottom="@+id/cbSolved" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="46dp" 
    android:text="My Cases" /> 

<EditText 
    android:id="@+id/etCaseSeacrh" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/cbSolved" 
    android:layout_marginLeft="28dp" 
    android:ems="10" 
    android:hint="Search" > 
</EditText> 

<ListView 
    android:id="@+id/liCases" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/btnNewCase" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/etCaseSeacrh" 
    android:layout_marginTop="23dp" 
    android:clickable="true" > 
</ListView> 

<Button 
    android:id="@+id/btnNewCase" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:text="New Case" /> 

</RelativeLayout> 

這是我的Java類在這個我訪問列表中,但無法點擊

public class ShowCases extends Activity{ 
    ListView listshowcase; 
EditText search; 
    ListViewAdapter adapter; 

    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
    setContentView(R.layout.screen4); 

    listshowcase = (ListView) findViewById(R.id.liCases); 
    adapter = new ListViewAdapter(this); 
     listshowcase.setAdapter(adapter); 
    listshowcase.setClickable(true); 
    listshowcase.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int arg2, 
       long arg3) { 
      // TODO Auto-generated method stub 
      String name = ((TextView) view.findViewById(R.id.name)).getText().toString(); 
      String cost = ((TextView) view.findViewById(R.id.email)).getText().toString(); 
      String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString(); 
      String id = ((TextView) view.findViewById(R.id.id)).getText().toString(); 
      // Starting new intent 
      Intent in = new Intent(getApplicationContext(), CompanyDetail.class); 
      in.putExtra("name", name); 
      in.putExtra("email", cost); 
      in.putExtra("ff", description); 
      in.putExtra("fff", id); 
      startActivity(in); 
     } 
    }); 


    search=(EditText)findViewById(R.id.etCaseSeacrh); 

    search.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // Call back the Adapter with current character to Filter 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count,int after) { 
     } 

       @Override 
     public void afterTextChanged(Editable arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    } 

,這是自定義的getview Listadapter類

@Override 
    public View getView(final int paramInt, View paramView, 
     final ViewGroup paramViewGroup) { 
     // TODO Auto-generated method stub 
     LayoutInflater inflator = activity.getLayoutInflater(); 
     if (paramView == null) { 
     view = new ViewHolder(); 
     paramView = inflator.inflate(R.layout.list_item, null); 

     view.name = (TextView) paramView.findViewById(R.id.name); 
     view.email = (TextView) paramView.findViewById(R.id.email); 
     view.mobile = (TextView) paramView.findViewById(R.id.mobile); 
     view.id = (TextView) paramView.findViewById(R.id.id); 
     paramView.setTag(view); 

     } else { 
     view = (ViewHolder) paramView.getTag(); 
     } 

    view.name.setText(TAG_NAME.get(paramInt)); 
    view.email.setText(TAG_EMAIL.get(paramInt)); 
    view.mobile.setText(TAG_PHONE_MOBILE.get(paramInt)); 
    view.id.setText(TAG_ID.get(paramInt)); 
    /*view.name.setFocusableInTouchMode(false); 
    view.name.setFocusable(false);*/ 
    /*view.setOnClickListener(myClickListener);*/ 
    view.name.setFocusable(false); 
    view.email.setFocusable(false); 
    view.mobile.setFocusable(false); 
    view.id.setFocusable(false); 

    return paramView; 
} 
+0

刪除所有setFocusable – 2013-05-14 05:56:47

+0

使用此,不工作 – Android 2013-05-14 06:09:22

+0

可能重複[ListView項目不可點擊。爲什麼?](http://stackoverflow.com/questions/8955270/listview-items-are-not-clickable-why) – rds 2015-07-01 13:38:44

回答

31

好吧,你有一個按鈕在那裏。在您的list_item xml中,將android:descendantFocusability="blocksDescendants"放在LinearLayout或RelativeLayout中。

+0

哇它的工作,唉我knw什麼功能這個的 ? – Android 2013-05-14 06:21:17

+0

我接受你的答案,請我想知道這個功能,請告訴你是否可以 – Android 2013-05-14 06:23:21

+1

此鏈接http://cyrilmottier.com/2011/11/23/listview-tips-tricks-4-add-several可點擊區域/有很多有用的信息。我無法解釋以及鏈接中解釋的內容。 – 2013-05-14 06:27:32

0

你能顯示列表嗎?如果是,那麼請顯示layout文件持有TextView在列表中顯示項目。

嘗試從TextView中刪除isTextSelectable。

檢查是否有一些愚蠢的錯誤就像我幾個月前發從這裏:

onItemClick in ListView doesn't work

+0

使用這個,不工作 – Android 2013-05-14 06:10:32

0

剛剛從ShowCases刪除

listshowcase.setClickable(true); 

此行。然後再試一次。

我希望這會幫助你。如果沒有,請讓我知道。

+0

使用這個,不工作 – Android 2013-05-14 06:10:11

0

將OnClickListener添加到從適配器返回的每個視圖中。