方向更改后,ViewPager中Fragment中的TextView为null

时间:2019-05-26 13:06:17

标签: java android android-fragments android-viewpager

我内部有一个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

2 个答案:

答案 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);
    }