2

В моем изображении есть боковая панель и ListView, я обращаюсь к каждой кнопке с помощью D-PAD. Когда кнопка поиска боковой панели имеет фокус, и я нажимаю правую кнопку D-PAD, я хочу, чтобы фокус переместился в первый элемент ListView. Но в моем случае это относится ко второму пункту. Если стрелка вниз имеет фокус, и я нажимаю правую кнопку, она переходит к пункту 4-го списка. Так что мне тоже нужно предотвратить это. Как перенести фокус на 1-й?Просмотреть список Фокус при использовании D-PAD

if (Search != null && Search.hasFocus()) { 
      // Search.setNextFocusRightId(R.id.listView); 
//   listView.smoothScrollToPosition(0); 
      listView.setChoiceMode(1); 
      listView.setItemChecked(0, true); 
     } 

enter image description here

+0

не могли бы вы рассказать, что вы на самом деле хотите? @Boopathi. и что такое боковая панель? это взгляд или что-то еще? опубликуйте макет xml, если сможете. –

+0

@Boopathi по умолчанию фокусируется всегда на первом элементе списка. Я думаю, что у вас есть условие в адаптере метода getView(). – Lokesh

+0

http://dev.booknow.club/api/category.php?format=json http://dev.booknow.club/api/listing.php?category_id=1&format=json – Boopathi

ответ

1

сделать фиктивный вид без фона и поместите его в тот же макет, как ваш ListView. Сделайте его сфокусированным и установите nextFocusRight вашего поиска для поиска id/dummy.

<ListView 
    android:id="@+id/listview" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:choiceMode="singleChoice" 
    android:listSelector="@null" 
    android:background="@null" 
    ></ListView> 
<View 
    android:id="@+id/dummy" 
    android:layout_width="1dp" 
    android:layout_height="1dp" 
    android:focusable="true" 
    /> 

Ваш SearchView:

<YourSearchView 
android:[email protected]+id/dummy/> 

Затем в коде, установить OnFocusChangedListener к вспомогательному зрения, которая будет указывать, что ListView должен получить фокус. Внутри слушателя, запросить фокус для ListView и установить выбор на 0 следующим образом:

View dummy = rootView.findViewById(R.id.dummy); 
     dummy.setOnFocusChangeListener(new View.OnFocusChangeListener() 
     { 
      @Override public void onFocusChange(View v, boolean hasFocus) 
      { 
       if (hasFocus) 
       { 
        listView.post(new Runnable() { 
         @Override 
         public void run() { 
          listView.requestFocus(); 
          listView.setSelection(0); 
         } 
        }); 
       } 
      } 
     }); 

Убедитесь, что вы используете @ + идентификатор для nextFocusItemRight вместо @Id. Надеюсь, что это поможет, иначе опубликуйте комментарий.

+0

я попытался выше идеи, он не работает. Если кнопка поиска имеет фокус, я нажимаю правую кнопку D-Pad, теперь фиктивный вид и список видят как фокусировку. – Boopathi

+0

Вы сделали фиктивный вид в фокусе в xml? – vandus

+0

да я сделал это – Boopathi

2

Лучшее, что нужно сделать, это переопределить диспетчерKeyevent в классе Activity, а затем установить фокус/выделение в том месте, где вам нравится в Listview.

@Override 
public boolean dispatchKeyEvent(KeyEvent event) { 




    boolean handled = super.dispatchKeyEvent(event); 

    if(!handled && event.getAction() == KeyEvent.ACTION_UP) 
    { 
     if(yourParentViewGroup.getFocusedChild() is your SearchView && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) 
     { 

      yourListvIew.setSelction(0); 
      handled = true; 
     } 

    } 

    return handled; 

Но помните, чтобы вернуться «истина», если вы собираетесь обрабатывать фокусировки или выбора логики иначе он будет ссылаться на андроид алгоритм focusfinder и фокус/выбор будет смещаться в ближайшее View.

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

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