2015-06-01 8 views
0

Я пытаюсь сделать просмотр списка с помощью элементов, доступных кликабе, и каждый list_item должен состоять из двух кнопок с кнопками.OnItemClickLisener не работает

Но если я добавить кнопки макета элемента, Итен нажмите слушателем перестает работать ...

вот мой 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 error, потому что на этот момент я не инициализировал прослушиватели нажатия кнопок. –

+0

@KaranMer, но моя проблема не в этом. когда я добавляю некоторые кнопки в item_layout, onItemClickLisener не работает –

ответ

3

Я только что нашел решение от here..but глубокой кнопки мыши ...

Если любая строка элемент списка содержит фокусируемые или интерактивные вид тогда OnItemClickListener не будет работать.

Элемент строки должен иметь параметров, как android:descendantFocusability="blocksDescendants".

здесь вы можете увидеть пример, как список ваш товар должен выглядеть

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

android: descendantFocusability = "blocksDescendants" - мне нужно добавить это в child_layout с помощью кнопок или в основном макете list_item? –

+0

добавить в макет ребенка –

+0

Спасибо! этот работа! и как теперь правильно реализовать на кнопке клик-прослушиватель? –

1

удалить onclick attribute 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; 
     } 
    }; 

 Смежные вопросы

  • Нет связанных вопросов^_^