2015-02-06 5 views
2

Так что я искал и искал каждый метод, который видел, но ничего не решает проблему. Мое listview генерирует с помощью пользовательского адаптера, я добавляю представление нижнего колонтитула и onTouchMethod, и я знаю, что он конкурирует за фокус с lsitview, а listview выигрывает, поскольку я читал об этой ошибке. Но, возможно, есть что-то, что я не вижу, и мне не хватает.Нижний колонтитул ListView выбирается только после первого выбора элемента списка.

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

Вот мой код.

customAdapter = new ListAdapter(this, R.layout.itemlistrow, store_data); 
    customAdapter.setNotifyOnChange(true); 

    listView.addFooterView(none_of_the_above, null, false); 
    listView.setAdapter(customAdapter); 

    listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

listView.setOnItemClickListener(new OnItemClickListener(){ 

     @Override 
     public void onItemClick(AdapterView<?> arg0, final View view, 
       int position, long id) { 



       none_of_the_above.setOnTouchListener(new View.OnTouchListener() { 

        @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
        public boolean onTouch(View v, MotionEvent event) { 
         if (event.getAction() == MotionEvent.ACTION_DOWN) { 
          v.setSelected(true); 
          view.setSelected(false); 
          view.setActivated(false); 
          view.clearFocus(); 

          Log.e("NoneOFTheAboveButton:onTouch", "clicked"); 
          none_of_the_above.setBackground(getResources().getDrawable(R.drawable.store_setup2_found_selection_boxes_modified_states)); 
         } 
         return false; 
        } 
       }); 

listView.clearFocus(); 
       none_of_the_above.setSelected(false); 
       view.setSelected(true); 
       view.setActivated(true); 

       selectedPosition = position; 
       customAdapter.setSelectedPosition(selectedPosition); 

} 


    }); 

моя кнопка колонтитула XML

<Button xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/none_of_the_above" 
    android:layout_width="match_parent" 
    android:layout_height="45dp" 
    android:layout_marginBottom="10dp" 
    android:layout_marginLeft="20dp" 
    android:layout_marginRight="20dp" 
    android:background="@drawable/store_setup2_found_selection_boxes_modified_states" 
    android:focusable="true" 
    android:clickable="true" 
    android:text="NONE OF THE ABOVE" /> 

ListView XML:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/selection_1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dp" 
    android:layout_marginLeft="20dp" 
    android:layout_marginRight="20dp" 
    android:layout_marginTop="20dp" 
    android:clickable="false" 
    android:focusable="false" 
    android:descendantFocusability="blocksDescendants" > 

я теперь взял onTouchMethod из OnItemClick из ListView и поставить его выше, и она получает нажмите на первый пытаться. Но теперь Listview не теряет фокус при первом нажатии, а затем щелкнет нижний колонтитул.

ответ

1

решен путем ввода метода onTouch вне onItemClick, а также один внутри onItemClick взаимодействовать с ListView, когда было выбрано ListView.

также добавил listview.clearChoices() внутри метода onTouch вне onIemClick

0

Перемещайте

 none_of_the_above.setOnTouchListener(new View.OnTouchListener() { 

      @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        v.setSelected(true); 
        view.setSelected(false); 
        view.setActivated(false); 
        view.clearFocus(); 

        Log.e("NoneOFTheAboveButton:onTouch", "clicked"); 
        none_of_the_above.setBackground(getResources().getDrawable(R.drawable.store_setup2_found_selection_boxes_modified_states)); 
       } 
       return false; 
      } 
     }); 

за пределами listView.setOnItemClickListener(). Поместите его перед этой строкой, а не в метод onItemClick().

Тогда в onItemClick() метод поставил:

none_of_the_above.setTag(view); 

И в onTouch() используют это:

if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        v.setSelected(true); 
        (v.getTag()).setSelected(false); 
        (v.getTag()).setActivated(false); 
        (v.getTag()).clearFocus(); 

        Log.e("NoneOFTheAboveButton:onTouch", "clicked"); 
        v.setBackground(getResources().getDrawable(R.drawable.store_setup2_found_selection_boxes_modified_states)); 
       } 
+0

Делать это работает и получает щелчок, но тогда ListView фокус не ведет себя должным образом (не получает невыбранным при сноска нажатия). Нижний колонтитул также не удерживается в фокусе, и когда я перехожу к следующему действию, мой чек, чтобы проверить, был ли выбран элемент, дает ошибку. – johntzan

+0

Возможно, у вашего нижнего колонтитула значение «GONE» видимо по умолчанию. – GIGAMOLE

+0

После некоторого тестирования только список не терял фокус на щелчке нижнего колонтитула. поэтому нижний колонтитул корректно ведет себя, за исключением того, что список не теряет фокус на его щелчке. Последнее добавление, которое вы добавили, дает мне возможность не разрешать методы для всех методов v.getTag(). – johntzan

0

В вашей кнопки XML:

android:clickable="false" 

onItemClickListener не будет работать, если кликабельны true для элемента в списке.

android:clickable="true" mean's that it's not clickable?

Вам также необходимо установить:

android:focusable="false 

Поскольку первый щелчок получает фокус.

https://stackoverflow.com/a/20473421/3956566

+0

это не сработало. Пробовали оба. настройка focusable на false дает мне исключение indexoutofbounds, а также не работает. – johntzan

+0

@Yianni Какова связь вашей кнопки/кнопки с вашим столом? Вы используете 'descendantFocusability =" blocksDescendants "' Так что было бы нехорошо, чтобы затем установить фокус на true для дочерних элементов. –

+0

В listview есть табличная рассылка с кучей текстовых просмотров. И кнопка - это только нижний колонтитул. Моя проблема сейчас не является тем, кто получает фокус и выбирается при первом щелчке, но вместо этого теперь, когда вы нажимаете на listview, а затем на нижний колонтитул, listview не теряет фокус. – johntzan

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