在我的片段中,我有他的听众代码
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恢复时我得到了这个错误
许多Hit& amp;试试我发现在App Resume上 fragmentTwoCallBackListener 对象为空java.lang.NullPointerException:at com.shayari4u.punjabistatus.FragmentTwo.onAdapterItemTypeClick (FragmentTwo.java:133)at com.shayari4u.punjabistatus.FragmentTwoAdapter $ 1.onClick (FragmentTwoAdapter.java:115)
我在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帮助
答案 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;
}
}