Android - 片段转换问题

时间:2017-09-18 12:29:16

标签: android android-fragments mobile fragment transition

我目前正在开发一个新闻源模块,我有这个片段转换问题。

转换示例:

  1. 新闻源> a>个人资料> b>细节> c>轮廓。

  2. 新闻源> a>细节> b>个人资料> c>细节。

  3. 每当我两次访问某个页面并尝试再次返回“a”时。我的应用程序崩溃,在

    上给出了nullpointerexception
    getActivity().onBackPressed();
    
    片段中的

    每个堆栈都在MainActivity中覆盖onBackPressed。当Backstack中没有2个相同的片段转换时,所有流都很好。

    PopBackStack示例:

    getSupportFragmentManager().popBackStack("profile", FragmentManager.POP_BACK_STACK_INCLUSIVE);
    

    如果您需要更多代码可以提供帮助,请与我们联系。 任何帮助将不胜感激。

    谢谢!

    编辑:

    Logcat错误:

    09-19 02:15:02.399 29778-29778/com.dbs.alive E/AndroidRuntime: FATAL EXCEPTION: main
       Process: com.dbs.alive, PID: 29778
       java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
           at com.dbs.alive.ProfileFragment$1.onClick(ProfileFragment.java:171)
           at android.view.View.performClick(View.java:5210)
           at android.view.View$PerformClick.run(View.java:21328)
           at android.os.Handler.handleCallback(Handler.java:739)
           at android.os.Handler.dispatchMessage(Handler.java:95)
           at android.os.Looper.loop(Looper.java:148)
           at android.app.ActivityThread.main(ActivityThread.java:5551)
           at java.lang.reflect.Method.invoke(Native Method)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
    

    主要活动(onBackPressed)

    @Override
    public void onBackPressed() {
    
        if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
            //this.finish();
            super.onBackPressed();
        } else {
    
            for (int i = getSupportFragmentManager().getBackStackEntryCount(); i > 0; i--) {
                String ide = getSupportFragmentManager().getBackStackEntryAt(i - 1).getName();
                if (ide != null) {
                    //1. FROM NEWSFEED
                    if (ide.equals("newsfeed")) {            
                    getSupportFragmentManager().popBackStack("newsfeed", FragmentManager.POP_BACK_STACK_INCLUSIVE);
                    break;
                    } else if (ide.equals("profile")) {
                    getSupportFragmentManager().popBackStack("profile", FragmentManager.POP_BACK_STACK_INCLUSIVE);
                    break;
                    }
    

    Fragment AddBackStack

    Fragment fragment = ProfileFragment.newInstance("", "");
    
    Bundle mBundle = new Bundle();
    mBundle.putString("profileid", postOwnerId);
    mBundle.putString("profilename", postOwnerName);
    mBundle.putString("profileicon", RealmHelper.getUserProfileUrl(postOwnerId));
    
    fragment.setArguments(mBundle);
    
    FragmentTransaction transaction = ((AppCompatActivity) activity).getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.newsfeed_layout, fragment);
    transaction.addToBackStack("profile");
    transaction.commit(); 
    

0 个答案:

没有答案