在应用程序恢复片段回调监听器是空的

时间:2017-09-11 12:50:10

标签: android android-fragments android-tabbed-activity

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

 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);

        }

正常使用该应用程序正常工作。但是当App恢复时我得到了这个错误

  

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

许多Hit& amp;试试我发现在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);

        }

    }

如何解决这个问题PLZ帮助

1 个答案:

答案 0 :(得分:0)

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

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

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

由于您的片段无法保存其FragmentTwoCallBackListener,并且由于setupViewPager()将不会再次被调用以重新设置它,因此它将为null发生的情况。

解决此问题的一种方法是更改​​获取FragmentTwoCallBackListener实例的方式。也许不是使用setter,你可以在你的片段中做这样的事情:

@Override
public void onAttach (Context context) {
    super.onAttach(context);
    if (context instanceof FragmentTwoCallBackListener) {
        fragmentTwoCallBackListener = (FragmentTwoCallBackListener) context;
    }
}