我内部有一个MainActivity
,我用ViewPager
创建了Fragments
。方向更改后,我正在使用saveInstanceState存储值以设置TextView
。我也想更改值,例如使用MainActivity
中的按钮。 Button正常工作,但是如果更改方向,则Button无法在TextView
中设置Fragment
,因为TextView现在为空。
MyFragment
public class MyFragment extends Fragment {
private TextView textView;
private String info;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.item_weather, container, false);
textView = view.findViewById(R.id.text_view);
Bundle bundle = getArguments();
info = bundle.getString("info");
setInfo(info);
return view;
}
public void setInfo(String info) {
this.info = info;
textView.setText(info); //here is the error
}
}
在MainActivity.java
的{{1}}中
OnCreate
myFragment = new MyFragment();
viewPager = findViewById(R.id.viewpager);
viewPager.setOffscreenPageLimit(10);
List<Fragment> fragments = new ArrayList<>();
fragments.add(myFragment);
pagerAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
viewPager.setAdapter(pagerAdapter);
看起来像这样:
MyPagerAdapter
正如我所说的,一切正常,但是如果我使用Button进行方向调整后,我得到一个错误:
public class MyPageAdapter extends FragmentStatePagerAdapter {
private List<Fragment> fragments;
public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
}
有什么办法解决这个问题吗?
编辑: 完全错误
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
答案 0 :(得分:0)
在片段中,尝试在onViewCreated方法的上初始化textView:
@Override
public View onViewCreated(view: View, savedInstanceState: Bundle) {
// Your initialization code here
}
答案 1 :(得分:0)
解决方案:
好的,EpicPandaForce,谢谢您的提示。
为解决此问题,我在MainActivity
@Override
protected void onResume() {
super.onResume();
viewPager.setAdapter(pagerAdapter);
}
@Override
protected void onPause() {
super.onPause();
viewPager.setAdapter(null);
}