Intereting Posts
Android AudioTrack не воспроизводит все образцы Каким должен быть JID для пользователя на OpenFire Server? Почему я не могу установить Google Cloud Messaging для Android-библиотеки Android RelativeLayout: как выравниватьParentBottom при завершении в ScrollView? GCM как отменить регистрацию устройства с GCM и сторонним сервером Приложение для Android от Cordova 5.0.0 не может подключиться к Интернету с помощью Android 4.0.0 Android logcat logs сообщение об истечении срока действия модуля Как рассчитать расстояние во время ходьбы в андроиде? Использование GCM на Android и iOS без полезной информации уведомления При создании POJO в Firebase вы можете использовать ServerValue.TIMESTAMP? Как повторить задачу после определенного количества времени в android? Символ не найден на OnActionExpandListener Жизненный цикл статического объекта Android Android Studio не удалось найти версию, совместимую с com.android.support:appcompat-v7:23.+ Android – программно выберите пункт меню

Панель действия Android в разделе «Навигация»

Я разрабатываю для Android 3+

В моей панели действий у меня есть раскрывающийся список (см., Как скрыть / отобразить список панелей действий на андроиде 3? Для раскрывающегося списка i intend). Проблема в том, что мне нужно сделать какое-то действие, когда пользователь что-то выбирает, но Android вызывает onNavigationItemSelected () так же, как он рисует представление, поэтому никакого выбора на самом деле не произошло.

Как я могу определить, действительно ли пользователь что-то нажал, и это не поддельный звонок от android?

public class ListDittaListener implements OnNavigationListener{ private BaseActivity activity; private ListDittaListener() { } public ListDittaListener(BaseActivity activity) { this.activity = activity; } @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { MyApp appState = ((MyApp)this.activity.getApplicationContext()); appState.setDittaSelezionata( (int) itemId); SharedPreferences settings = this.activity.getSharedPreferences(MyApp.PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putInt("ditta_id_selezionata", (int) itemId); ////////restart activity this.activity.recreate(); return false; } } 

Solutions Collecting From Web of "Панель действия Android в разделе «Навигация»"

Вы можете просто просто игнорировать первый вызов onNavigationItemSelected если хотите:

 public class Whatever implements OnNavigationListener { private boolean synthetic = true; @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { if (synthetic) { synthetic = false; return true; } // do whatever you really wanted here } } 

Метод onNavigationItemSelected(int itemPosition, long itemId) будет вызываться в любом случае панелью действий.

То, что вы, возможно, захотите сделать, – это сообщить панели действий, что itemPosition она должна передать методу при первом вызове. (Другими словами, чтобы сообщить панели действий, какой элемент навигации следует установить после создания активности). Вот код:

 mActionBarMenuSpinnerAdapter = ...; mActionBar = getActionBar(); mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); mActionBar.setListNavigationCallbacks(mActionBarMenuSpinnerAdapter, this); mActionBar.setSelectedNavigationItem(###your_default_navigation_item_here###); 

После этого вы можете решить свою проблему, применив изменения в onNavigationItemSelected(int itemPosition, long itemId) если только itemPosition отличается.

После установки активности система андроида вызовет onNavigationItemSelected (0, 0). (Это означает, что позже, чем onResume ()).

Как говорили другие ребята, вам лучше не делать взлома, как игнорировать первый звонок, иначе система Android не будет вызывать onNavigationItemSelected () снова, когда вы выберете первый индекс. (Система считала, что первый элемент уже выбран)

Мое решение – вызвать actionbar.setSelectedNavigationItem (реальный элемент #, который вы хотите) после настройки панели действий. Затем система будет вызывать onNavigationItemSelected () дважды. Сначала onNavigationItemSelected (0, 0), а затем onNavigationItemSelected (реальный элемент #).

Ну, я не вижу ничего плохого в вашем текущем коде.

Как вы создали свои выпадающие элементы. И какой элемент «выбирает» Android после создания представления. И что вы делаете в методе onCreate, где инициализируется ActionBar.

Я сделал это, как указано здесь, и это сработало для меня: http://developer.android.com/guide/topics/ui/actionbar.html#Dropdown

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

 public class MyFragment extends Fragment implements ActionBar.OnNavigationListener { private boolead fireReady = false; @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); // every time make it false, this method invoked on swipe action fireReady = false; if (isVisibleToUser) { // setup actionbar, you also can setup action bar in activity String[] array = getActivity().getResources().getStringArray(R.array.users_order); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, array); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); getActivity().getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); getActivity().getActionBar().setListNavigationCallbacks(adapter, this); } } @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { if (fireReady) { // task fire only when you directly press navigation item UsersTask task = new UsersTask(getActivity()); task.setTaskListener(this); task.execute(usersUrls[itemPosition]); } else { // make it true first time when page displayed fireReady = true; } return false; } } }