Переключение между действиями → цикл бесконечности

Я новичок в Android и имею "небольшую" проблему.

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

Он отлично работает, когда я использую фрагменты, но я хочу использовать действия... Надеюсь, кто-то может мне помочь :)

Вот мой код.

public class MainActivity extends Base {

@Override
protected void onCreate(Bundle savedInstanceState) {
 Log.v("boot", "MainActivity-onCreate");
 super.onCreate(savedInstanceState);

 FragmentManager fragmentManager = getSupportFragmentManager();
 fragmentManager.beginTransaction()
 .replace(R.id.container, new MainFragment())
 .commit();
}

База

public class Base extends ActionBarActivity implements
 NavigationDrawer.NavigationDrawerCallback {

public NavigationDrawer mNavigationDrawer;

@Override
protected void onCreate(Bundle savedInstanceState) {
 Log.v("boot", "Base-onCreate");
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 // Set up the drawer
 mNavigationDrawer = (NavigationDrawer)
 getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);

 mNavigationDrawer.setUp((DrawerLayout)findViewById(R.id.drawer_layout),
 R.id.navigation_drawer);
}

навигация

public class NavigationDrawer extends Fragment {

private ActionBarDrawerToggle mDrawerToggle;
private NavigationDrawerCallback mCallbacks;

private DrawerLayout mDrawerLayout;
private ListView mDrawerListView;
private View mFragmentContainer;

private boolean mUserLearnedNavigation;
private static final String PREF_USER_LEARNED_NAVI = "navigation_learned";
private static final String STATE_SELECTED_POSITION = "selected_position";

private int mCurrentSelectedPosition;
private boolean mFromSavedInstanceState;

@Override
public void onCreate(Bundle savedInstanceState) {
 Log.v("boot", "Nav - onCreate");
 super.onCreate(savedInstanceState);

 SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
 mUserLearnedNavigation = sp.getBoolean(PREF_USER_LEARNED_NAVI, false);

 if (savedInstanceState != null) {
 mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
 mFromSavedInstanceState = true;
 }

 selectItem(mCurrentSelectedPosition);
} ... 
private void selectItem(int position) {
 Log.v("boot", "Nav - selectitem");
 mCurrentSelectedPosition = position;
 if (mDrawerListView != null) {
 mDrawerListView.setItemChecked(position, true);
 }

 if (mDrawerLayout != null) {
 mDrawerLayout.closeDrawer(mFragmentContainer);
 }

 if (mCallbacks != null) {
 mCallbacks.onNavigationDrawerItemClicked(position);
 }

 switch (position) {
 case 0:
 startActivity(new Intent(getActivity(), MainActivity.class));
 break;
 case 1:
 startActivity(new Intent(getActivity(), ExpensesActivity.class));
 break;
 default:
 startActivity(new Intent(getActivity(), MainActivity.class));
 break;
 }
}
1 ответ

Каждый раз, когда вы начинаете свою деятельность, ваше меню воссоздается, и, таким образом, случай переключения выполняется. Вы не должны вызывать selectItem в onCreate вашего меню. Если вы хотите сохранить навигацию пользователя, вам нужно будет начать работу в MainActivity.

Вы можете добавить проверку, чтобы увидеть, является ли getActivity экземпляром действия, которое вы хотите запустить, прежде чем вызывать startActivity, чтобы вы больше не запускались в бесконечном цикле.

licensed under cc by-sa 3.0 with attribution.