所以我的片段中有一个叫做getTags()的函数, 当我将此片段从MainActivity添加到framelayout中时,我只想调用它一次
但是在onCreateView()中调用它会调用此函数,即使在弹出Back Stack时将该函数恢复回来。
现在这样做的原因是,片段中有3种相对布局, 它以1开头,当单击某物时,它进入相对布局2;当单击某物时,它进入相对布局3;现在,当在此处按下某物时,一个新的片段将替换为帧布局中的该片段,而在该片段中,按下后退按钮,上一个片段应加载相对布局3而不是1,因此这就是我不想每次在onCreateView()中调用它的原因
这是我的代码:
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import java.util.ArrayList;
import java.util.Arrays;
public class CodeFragment extends Fragment {
public CodeFragment() {
// Required empty public constructor
}
public ArrayList<String> tags;
public SharedPreferences prefs;
//TagLayout
RelativeLayout Relative_tag;
public String tag_dbName;
public RecyclerView tagRecycler;
public RecyclerView.Adapter tag_adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_code, container, false);
prefs = getActivity().getSharedPreferences(getActivity().getPackageName(), Context.MODE_PRIVATE);
//TagLayout
tag_dbName ="sub_oopm";
Relative_tag = v.findViewById(R.id.Relative_Tag);
tagRecycler = v.findViewById(R.id.tagRecycler);
getTags();
return v;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void getTags()
{
if(prefs!=null)
{
String combinedTags = prefs.getString(tag_dbName +"_tags", "null");
if(!combinedTags.equalsIgnoreCase("null"))
{
tags = new ArrayList<>(Arrays.asList(combinedTags.split("\\s*,\\s*")));
tagRecycler.setHasFixedSize(true);
tagRecycler.setLayoutManager(new LinearLayoutManager(getContext()));
tag_adapter = new TagAdapter(tags, getContext());
tagRecycler.setAdapter(tag_adapter);
}
}
}
}
我尝试在onCreate()中调用getTags(),但是回收器视图将不会加载。
另外一个问题:想象一下framelayout加载了一个片段,当用户单击设备上的“主页”按钮,然后从最新消息中打开应用程序时会发生什么?是调用saveInstanceState还是仅当我用另一个片段替换此片段然后按返回以返回到该片段时才调用它?到底会发生什么?