Как я могу изменить вид элемента в раскрывающемся списке навигации на панели действий при нажатии? После щелчка я хочу, чтобы отображаемый элемент отображал другой вид (в макете он установлен как невидимый). У меня есть метод onNavigationItemSelected из ActionBar.OnNavigationListener, но он не передает представление о нажатом элементе, а только положение элемента в навигационном счетчике. Или, другими словами, почему я не могу получить ссылку на выбранный вид из счетчика панели действий? (например, я могу получить представление с listview onItemClick от OnItemClickListener())
Панель действий, как изменить вид при нажатии на элемент
Ответы (3)
Идентификатор Spinner ресурса ActionBar: android:id/action_bar_spinner
Получите идентификатор ресурса Spinner:
int resId = getResources().getIdentifier("action_bar_spinner", "id", "android");
Получите ссылку на виджет Spinner, используя идентификатор ресурса:
final Spinner spinner = (Spinner) getWindow().getDecorView().findViewById(resId);
Теперь вы сможете получить доступ к выбранному представлению:
CheckedTextView v = (CheckedTextView) spinner.getSelectedView();
Вы можете сразу изменить выбранный вид в OnNavigationListener:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new MyFragment())
.commit();
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this,
R.array.action_list, android.R.layout.simple_spinner_dropdown_item);
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
int resId = getResources().getIdentifier("action_bar_spinner", "id", "android");
final Spinner spinner = (Spinner) getWindow().getDecorView().findViewById(resId);
this.getActionBar().setListNavigationCallbacks(mSpinnerAdapter, new ActionBar.OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition,
long itemId) {
CheckedTextView v = (CheckedTextView) spinner.getSelectedView();
// Modify selected view.
return true;
}
});
}
person
Manish Mulimani
schedule
19.08.2014
как вы узнали, что такое идентификатор ресурса?
- person CQM; 19.08.2014
Использование функции DDMS
Dump View Hierarchy.
- person Manish Mulimani; 19.08.2014
resId = 0 отсюда. Я тоже использую настоящую панель действий (без режима совместимости)
- person CQM; 19.08.2014
@CQM Я вставил
onCreate код. resId должен быть получен после вызова setNavigationMode. Дайте мне знать, работает ли это для вас.
- person Manish Mulimani; 20.08.2014
это в моем onCreateView в моем фрагменте, и после
setNavigationMode все мои конфигурации панели действий относятся к этому фрагменту и происходят в его жизненном цикле. Все еще получаю resId = 0
- person CQM; 20.08.2014
@CQM Странно. В целях отладки вы можете попробовать сделать
View Hierarchy снимок экрана с помощью DDMS. Благодаря этому вы получите идентификатор.
- person Manish Mulimani; 20.08.2014
это работало на Nexus 5, но не на Nexus 4 или некоторых других устройствах для меня, а также на разных версиях Android
- person CQM; 23.08.2014
Я просто пытался понять это, и мне удалось отследить это.
Для этого используйте setSelectedNavigationItem.
person
mlmkvr
schedule
30.06.2012
Спасибо, но метод setSelectedNavigationItem просто устанавливает выбранный элемент в навигации на панели действий. Что мне нужно, так это способ получить ссылку на выбранный вид элемента в счетчике (тот, который показан выбранным на счетчике панели действий), а затем изменить его по мере необходимости.
- person VladacusB; 02.07.2012
С помощью вашего navigationListener вы можете попробовать следующее:
OnNavigationListener navigationListener = new OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
View convertView = null;
View view = adapter.getView(itemPosition, convertView, null);
TextView myTextView = (TextView) view
.findViewById(R.id.my_textView);
Toast.makeText(getBaseContext(), myTextView.getText(),
Toast.LENGTH_LONG).show();
return true;
}
Затем вы извлекаете элемент через адаптер. Моя единственная проблема теперь заключается в изменении полученного эталонного содержимого. Я не могу заставить его работать.
Я надеюсь, что это помогает
person
kaffein
schedule
11.09.2012
да, это не работает, кажется, это на правильном пути, хотя
- person CQM; 19.08.2014