2015-06-01 14 views
0

我正在試圖與點擊的項目列表視圖中,每LIST_ITEM必須由2個點擊按鈕。OnItemClickLisener不起作用

但是,如果我將按鈕添加到項目佈局,ITEN點擊監聽器停止工作...

這裏是我的item_layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    android:gravity="center"> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp"> 
     <com.pkmmte.view.CircularImageView 
      android:id="@+id/friends_new_photo_circularImageView" 
      android:layout_gravity="center" 
      android:layout_width="@dimen/user_friends_width" 
      android:layout_height="@dimen/user_friends_height" 
      android:src="@mipmap/ic_launcher" 
      app:border="true" 
      app:border_color="#EEEEEE" 
      app:border_width="2dp" 
      app:shadow="true"/> 
     <ImageView 
      android:id="@+id/friends_new_online_status_imageview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/online_status" 
      android:layout_alignBottom="@+id/friends_new_photo_circularImageView" 
      android:layout_alignRight="@+id/friends_new_photo_circularImageView" 
      android:layout_marginRight="8dp" 
      android:layout_marginBottom="5dp"/> 
    </RelativeLayout> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_weight="1"> 
     <TextView 
      android:id="@+id/friends_new_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="18sp" 
      android:textStyle="bold"/> 
     <ImageView 
      android:id="@+id/friends_new_rating" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="10dp" 
      android:src="@drawable/stars"/> 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="35dp" 
      android:onClick="true" 
      android:text="Add"/> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="35dp" 
      android:onClick="true" 
      android:text="Dismiss"/> 
    </LinearLayout> 
</LinearLayout> 

這裏是片段佈局(與ListView控件):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
    android:id="@+id/listview_friends" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    style="@style/ListViewStyle"/> 

</LinearLayout> 

,這裏是我的片段與onCreateView和onItemClickListener:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_friends_listview, container, false); 
     ButterKnife.inject(this, rootView); 

     String[] mNames = { 
       "Example 1", 
       "Example 2" 
     }; 

     mFriendsAdapter = new FriendsAdapter(getActivity(), null, 0); 

     List<String> mList = new ArrayList<>(Arrays.asList(mNames)); 
     ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(
       getActivity(), 
       R.layout.list_item_friends_new, 
       R.id.friends_new_name, 
       mList 
     ); 

     mListView.setOnItemClickListener(this); 
     mListView.setAdapter(mAdapter); 

     return rootView; 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     FriendsFragment.openCurrentUser(getActivity()); 
    } 

因此,這裏的問題:

是有可能使點擊時listItems可點擊的按鈕? 如果它的真實性比如何做呢?如果它是假的 - 也許你有其他解決方案?

+0

當你點擊按鈕什麼日誌顯示? –

+0

現在它給en錯誤,因爲這一刻我沒有初始化按鈕點擊偵聽器。 –

+0

@KaranMer,但我的問題不是這個。當我添加一些按鈕到item_layout時,onItemClickLisener不起作用 –

回答

3

我只是深深的點擊找到解決方案從here..but ...

如果列表中的任何行項目包含可聚焦或點擊視圖然後OnItemClickListener將無法​​正常工作。

行項目必須有一個像android:descendantFocusability="blocksDescendants".

在這裏你可以看到例如,設置了一個param列表項應該怎麼看起來像

row_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:baselineAligned="false" 
android:descendantFocusability="blocksDescendants" 
android:gravity="center_vertical" > 

// your other widgets here 

</LinearLayout> 

或添加這兩個線內部視圖

android:focusable="false" 
android:focusableInTouchMode="false" 
+0

機器人:descendantFocusability =「blocksDescendants」 - 我需要在child_layout的按鈕或LIST_ITEM的主要佈局添加此? –

+0

加入子佈局 –

+0

謝謝! 這項工作!以及現在如何正確實現按鈕點擊監聽器? –

1

刪除onclick屬性lik Ë婁在你的代碼...

<LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 
      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="35dp" 
       android:onClick="true"//remove this 
       android:text="Add"/> 
      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="35dp" 
       android:onClick="true" //remove this 
       android:text="Dismiss"/> 
     </LinearLayout> 

,寫你的適配器

ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(
      getActivity(), 
      R.layout.list_item_friends_new, 
      R.id.friends_new_name, 
      mList 
    ){ 

     View.OnClickListener listener = new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //your action on button click 
      } 
     }; 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view = super.getView(position, convertView, parent); 
      Button button = (Button) view.findViewById(R.id.yourButtonID); 
      button.setOnClickListener(listener); 
      return view; 
     } 
    };