2012-06-12 2 views
1

У меня есть ListView с макете строки, каккнопки внутри ListView

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:weightSum="5" 
    > 

     <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/ArriveTime" 
     android:gravity="center" 
     android:layout_weight="1" /> 


     <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/Name" 
     android:gravity="center" 
     android:layout_weight="1" /> 

     <Button 
     android:focusable="false" 

     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/Arrive" 
     android:gravity="center" 
     android:layout_weight="1"   
     android:text="Arrive" /> 

     <Button 
     android:focusable="false" 

     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/Encounter" 
     android:gravity="center" 
     android:layout_weight="1"   
     android:text="Encounter" /> 

     <Button 
     android:focusable="false" 

     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/Exit" 
     android:gravity="center" 
     android:layout_weight="1"   
     android:text="Exit" /> 




</LinearLayout> 

Я хочу, чтобы, когда щелчок по строке в состоянии нажать на кнопки, так что я установить android:focusable="false" и по щелчку я говорю

MainGrid.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

      Log.d("zzzzzzzzzzzzzzzzzzzzzzzz",""+ oldPosition); 

      if(oldPosition != -1) 
      { 
       MainGrid.getChildAt(oldPosition).setFocusable(false); 
       //MainGrid.findViewById(oldPosition).setFocusable(false); 
      } 

      // Set the whole list view unfocusable 
      MainGrid.setFocusable(false); 


      // focus only on this 
      view.setFocusable(true); 

      oldPosition = position -1; 

      SetMenueOnClick(position-1) ; 
}}); 

в проблема в том, что после первого щелчка на строке кнопки будут активны, и я не могу снова на нее нажимать любую идею, чтобы исправить это, мне нужно активировать кнопки в строке, которую я нажимаю, затем перенести фокус на строку для дальнейшего нажатия

+0

Вы можете использовать виджет радиообъектива, если он соответствует вашим целям. – Sanandrea

ответ

0

Кроме setFocusable (true), вы также можете использовать setChecked (boolean b). Но вы можете использовать этот метод в CompoundButton.

От Java:

CompoundButton cb = (CompoundButton) findViewById(R.id.yourButton); 
cb.setChecked(true); 

В XML

<CompoundButton 
    android:id="@+id/yourButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/button_stats" 
    android:text="@string/stat_hard"> 
</CompoundButton> 

Где button_stats.xml файл находится в разрешении/вытяжке, который содержит следующие строки:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/generic_button_normal" android:state_checked="false"/> 
<item android:drawable="@drawable/generic_button_checked" android:state_checked="true"/> 
</selector> 
0

Вы можете попробуйте использовать:

android:descendantFocusability="blocksDescendants" 

В вашем макете XML вместо изменения каждого элемента отдельно.

Вы можете прочитать на кнопке в виде списка выдает Here

Особенно комментарии # 27 & # 31

Надеются, что это помогает

3

Если вы хотите, как линия и кнопки, чтобы быть интерактивными (все время), вам не нужно проходить все эти повороты. Просто добавьте эти две строки в вашей кнопке выноски в строке XML:

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

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

Если вы хотите, чтобы кнопки были отключены до тех пор, пока вы не нажмете на строку (я не был ясен, если это была цель или просто эффект от способа, которым вы пытались получить оба щелчка), настроенный в xml то же самое, что и для фокусируемых выносок, установите кнопки для отключения, а затем в onListItemClick настройте оператор if с использованием флага, чтобы переключать их на клики и не кликать, используя button.setEnabled(false); и button.setEnabled(true);.

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