Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在活动之间切换->;无限循环_Android - Fatal编程技术网

Android 在活动之间切换->;无限循环

Android 在活动之间切换->;无限循环,android,Android,我是android新手,有一个“小”问题 我正在开始扩展基类的主要活动。 基类启动我的“导航”类。。。在导航类中,我有一个开关参数要选择,应该创建哪个活动-好吧,现在我有一个无限循环,我不知道为什么 当我使用片段时,它工作得很好,但我想使用活动。。。希望有人能帮我:) 这是我的密码 public class MainActivity extends Base { @Override protected void onCreate(Bundle savedInstanceState) {

我是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 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;
    }
}

每次启动活动时,都会重新创建菜单,从而执行切换案例。您不应该在菜单的onCreate中调用selectItem。如果要保持用户导航,必须在MainActivity中启动适当的活动

在调用startActivity之前,可以添加一个检查,查看getActivity是否是要启动的活动的实例,这样就不会再次在无限循环中运行

谢谢!;)但我如何处理我的“问题”。我希望使用多个活动,而不是一个包含多个片段的活动。因此,我想使用实现导航的“基类”。如果getActivity是一个实例,我该如何查看?Sry我是java/android新手:>我是“php开发人员”^^
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;
    }
}