2014-11-25 4 views
0

У меня есть список с кнопками в каждой строке в фрагменте, количество кнопок на основе базы данных sqlite. Я хочу сделать, когда кнопка нажмет на нее, переместится на другую новую активность и имена кнопок разбора. Но когда я нажимаю кнопки, ничего не происходит, я уже пытаюсь использовать этот код в xml-файле от ListView setOnItemClickListener not working by adding button, но он все еще не работает.ListView с setOnItemClickListener не работает с кнопкой

android:focusable="false" 
android:focusableInTouchMode="false" 
android:descendantFocusability="blocksDescendants" 

У кого-нибудь есть решение? Спасибо до и ниже, это мой код.

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     DatabaseHandler db = new DatabaseHandler(getActivity()); 

     listView = (ListView) getView().findViewById(R.id.list_addcard); 

     List<CardType> listCardType = db.getAllCardType(); 
     for(CardType ct : listCardType){ 
      String log = "ID: " + ct.getTypeId() + " Category Name: " + ct.getTypeCategory(); 
      Log.d("Result: ", log); 
      categoryArray.add(ct); 
     } 

     adapter = new ListAdapterAddCard(getActivity(), R.layout.list_row_addcard, categoryArray); 
     listView.setAdapter(adapter); 

     listView.setOnItemClickListener(new OnItemClickListener(){ 
      @Override 
      public void onItemClick(AdapterView<?> parent, View v, final int position, long id){ 
       categoryName = categoryArray.get(position).getTypeCategory(); 

       Intent intent = new Intent(getActivity(), DetailCategory1.class); 
       intent.putExtra("categoryName", categoryName); 
       startActivity(intent); 
      } 
     }); 
    } 

listview.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="@color/background"> 

    <ListView 
     android:id="@+id/list_addcard" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:divider="@null" 
     android:layout_marginTop="30dp"/> 

</RelativeLayout> 

listrow.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:orientation="horizontal" 
    android:padding="8dp" 
    android:descendantFocusability="blocksDescendants"> 

    <Button 
     android:id="@+id/category_name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textSize="@dimen/category" 
     android:focusable="false" 
     android:focusableInTouchMode="false"/> 

</RelativeLayout> 
+0

Адаптер определен в вашей деятельности или это другой класс? –

+0

@TrebiaProject фактически находится в другом классе – mrconga

ответ

0

Во-первых, удалите следующие из вашей кнопки XML ..

android:focusable="false" 
    android:focusableInTouchMode="false" 

затем в пользовательском адаптере где вы раздуваете свой собственный xml ce ll в списке, получите ссылку на кнопку и установите для нее кнопку onclick.

0

Для меня это не работало с функцией startActivity в приложении, как внутри функции, которой у вас нет доступа к контексту, вам нужно добавить переменную активности хоста. В принципе, я думаю, что вам нужно сделать следующее:

Activity host = (Activity) listView.getContext(); 
Intent intent = new Intent(host, DetailCategory1.class); 
.... 
host.startActivity(intent); 

Это то, что мне нужно сделать в методе GetView моего адаптера для стандартного ListView.

0

category_name Кнопка ворует фокус из элемента ListView, вы можете либо добавить OnClick слушателя к каждой кнопке элемента или просто использовать TextView вместо стиле, как кнопки, это очень плохая практика, хотя и сбивает с толку пользователей

<?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="horizontal" 
    android:padding="8dp" 
    android:descendantFocusability="blocksDescendants"> 

    <TextView 
     android:id="@+id/category_name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textSize="@dimen/category" 
     style="@android:style/Widget.Button"/> 

</RelativeLayout> 
0

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

<Button 
     android:id="@+id/category_name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textSize="@dimen/category" 
     android:clickable="true"/> 

Далее, вы устанавливаете OnItemClickListener к «ListView» (< < родителя) сам не в (кнопка >>) детей listView.setOnItemClickListener(new OnItemClickListener(){

НО,

вы можете получить ссылку на category_name кнопку, как только вы завышены ваш ListView, делая что-то вроде этого;

Button myButton = (Button) list_addcard.findViewById(R.id.category_name); 

Если вам нужна дополнительная помощь, вы всегда можете посетить Android документации для ListView ListView Documentation

Приветствия.

0

Итак, наконец, я нашел ответ, я меняю setOnClickListener на свой класс адаптера, и это отлично работает для меня. Спасибо всем за ваше предложение.

holder.txtCategoryName.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Intent intent = new Intent(context, DetailCategory.class); 
        int pos = (Integer) v.getTag(); 
        categoryName = categoryItems.get(pos).getTypeCategory(); 
        intent.putExtra("categoryName", categoryName); 
        context.startActivity(intent); 
       } 
      }); 
Смежные вопросы