Mam swoją pracę Listview z D-pad, który może przełączać fokus wewnątrz elementu listy. Tak to rozwiązuję. Po pierwsze, pozwól, aby Twój widok listy był skupiony na pozycji.
UWAGA: Jeśli spróbujesz ustawić ItemsCanFocus na wartość false w kodzie, Twój element listy nie będzie mógł już skupić się, nawet jeśli twój zestaw ponownie ustawi się na true, więc nie rób tego.
mDpadListView.setItemsCanFocus(true);
Następnie potrzebne jest pole do śledzenia, który element listy jest aktualnie wybrany. Tutaj umieszczam ViewHolder w tagu listItem w Adapter.
mDpadListView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
if (view.getTag() != null) {
DpadListAdapter.ViewHolder holder = (ViewHolder) view.getTag();
if (holder.shortCut != null && holder.shortCut.isShown()) {
currentSelectView = view;
} else {
currentSelectView = null;
}
} else {
currentSelectView = null;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Po trzecie, przesłonię onKeyDown() w Activity Method, aby kontrolować klawisz w górę, w dół, w lewo, w prawo dla D-pad.
Gdy użytkownik naciśnie prawy przycisk na D-pad, pozwolę, aby listview wyczyściłFoucs() i pozwolił ImageView wewnątrz uzyskać fokus.
Gdy użytkownik naciśnie w górę, w dół lub w lewo, element ImageView na liście usunie jego fokus i listView ponownie uzyska fokus.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (currentSelectView != null) {
DpadListAdapter.ViewHolder holder =
(ViewHolder) currentSelectView.getTag();
mDpadListView.clearFocus();
holder.shortCut.setFocusable(true);
holder.shortCut.requestFocus();
return true;
}
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
if (currentSelectView != null) {
DpadListAdapter.ViewHolder holder =
(ViewHolder) currentSelectView.getTag();
if (holder.shortCut.hasFocus()) {
holder.shortCut.clearFocus();
holder.shortCut.setFocusable(false);
mDpadView.requestFocus();
return true;
}
}
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
Witam, potrzebuję pomocy, chcę wiedzieć, jak wybrać element z podkładką d-pad, a następnie zmienić kolor tła. – wdyz
Musisz użyć listy stanów, którą można przeciągnąć na obrazie tła twojego przedmiotu, dać androidowi: state_focused = "true" inny obraz z normalnego stanu. ref: http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList – henry74918
Cześć, co to jest currentSelectView – Andrain