0

在我的片段中,我有他的听众代码

 private  FragmentTwoCallBackListener fragmentTwoCallBackListener;

        public interface FragmentTwoCallBackListener {
            void onItemTypeClick(String itemType,String textInPunjabi);
        }

       public void onAdapterItemTypeClick(String textA, String textB){


            if(fragmentTwoCallBackListener == null)
                Log.w(TAG," fragmentTwoCallBackListener Null Error - ");
            else
                Log.w(TAG," fragmentTwoCallBackListener not Null - " );



            fragmentTwoCallBackListener.onItemTypeClick(textInEnglish,textInPunjabi);

        }

在正常使用情况下,该应用程序运行良好。但是当应用程序恢复时我收到了这个错误

java.lang.NullPointerException:在 com.shayari4u.punjabistatus.FragmentTwo.onAdapterItemTypeClick (FragmentTwo.java:133) 在 com.shayari4u.punjabistatus.FragmentTwoAdapter$1.onClick (FragmentTwoAdapter.java:115)

经过多次 Hit & Try 我发现在 App Resume 上fragmentTwoCallBackListener对象为空

我在 TabbedLayout 中使用这个片段。

private void setupViewPager(ViewPager viewPager) {

        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        f1 = new FragmentOne();
        if (getIntent().hasExtra("type")) {   // PUT EXTRAS FOR FRAGMENT IF GET NOTIFICATION

            Bundle bundle = new Bundle();
            bundle.putString("post_type", getIntent().getStringExtra("type"));
            f1.setArguments(bundle);
           Log.w(TAG,"Tabbed Activety Get Notification for Post Type -   " +  getIntent().getStringExtra("type"));
        }

        showItemFragment = new FragmentTwo();
        showItemFragment.setFragmentTwoCallBackListener(this);
        adapter.addFragment(showItemFragment, "Category");
        adapter.addFragment(f1, "Posts");

        if(adapter==null){
            Log.w("Tabbed","Adapter is blank");
        }{
            viewPager.setAdapter(adapter);

        }

    }

如何解决这个问题请帮忙

4

1 回答 1

1

在许多情况下,Android 框架会杀死您的应用程序的进程以节省系统资源。发生这种情况时,您的应用程序将有机会保存其状态,以便在用户最终导航回您的应用程序时恢复它。

您未使用此过程存储的任何内容都将丢失。

活动、片段和视图都有一些内置功能,可以在发生这种情况时保存它们的状态。通常这是一件好事,但在这里它会让你的生活更加艰难。当系统销毁您的应用程序并重新创建它时,由于片段管理器将成功保存和恢复您的片段,因此您的setupViewPager()方法将不会被再次调用。

由于您的片段没有办法保存它FragmentTwoCallBackListener,并且由于setupViewPager()不会再次被调用来重新设置它,所以它会null在这种情况发生时发生。

解决此问题的一种方法是更改FragmentTwoCallBackListener​​获取实例的方式。也许您可以在片段中执行以下操作,而不是使用 setter:

@Override
public void onAttach (Context context) {
    super.onAttach(context);
    if (context instanceof FragmentTwoCallBackListener) {
        fragmentTwoCallBackListener = (FragmentTwoCallBackListener) context;
    }
}
于 2017-09-11T14:01:41.293 回答