【问题标题】:Why is 'onCreateView' method called in fragment after rotation?为什么旋转后在片段中调用“onCreateView”方法?
【发布时间】:2016-07-30 16:07:32
【问题描述】:

我在我的主要活动中实现了一个列表片段。我通过这段代码打开片段:

  fragmentTransactionChat = getSupportFragmentManager().beginTransaction();
    if(savedInstanceState == null) {
        itemFragment = ChatItemFragment.newInstance(1);
        fragmentTransactionChat.add(R.id.frame_main, itemFragment, "chatFragment").commit();
    }
    else {
        itemFragment = (ChatItemFragment) getSupportFragmentManager().findFragmentByTag("chatFragment");
    }

这是片段中的onCreateView 方法:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    setRetainInstance(true);
    View view = inflater.inflate(R.layout.fragment_item_list, container, false);
    // Set the adapter
    final Context context = view.getContext();
    recyclerView = (RecyclerView) view.findViewById(R.id.list);
    if (mColumnCount <= 1) {
        linearLayoutManager = new PreCachingLayoutManager(context);
        recyclerView.setLayoutManager(linearLayoutManager);

    } else {
        recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount));
    }
    mAdapter = new PostRecyclerViewAdapter(getActivity(), mListener);
    recyclerView.setAdapter(mAdapter);
    RecyclerView.ItemAnimator animator = recyclerView.getItemAnimator();
    if (animator instanceof SimpleItemAnimator) {
        ((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
    }
    recyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener(linearLayoutManager, mAdapter) {
        @Override
        public void onBottomList() {
            floatingActionButton.hide();
        }
    });

    postProvider = PostProvider.getInstance(getActivity());
    postProvider.setCallListener(this);

    bindItems(view);

    if(savedInstanceState == null) {
        postProvider.loadPost();
    }
    bindNotificationManager();
    return view;
}

我的问题是当我旋转设备时,onCreateView 方法被再次调用并且 mAdapter 对象和其他对象为空,所以它导致了我的逻辑问题。 注意:旋转后我的主要活动没有添加我的片段,因为我已经通过这个条件命令处理了它:

if(savedInstanceState == null)

有什么问题?!

【问题讨论】:

标签: android android-fragments android-lifecycle


【解决方案1】:

问题出在getActivity(),即null。尝试在您的 onCreateView 方法中使用 ((Activity) getContext()) 获取活动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多