Итак, у меня есть функция getTags () в моем фрагменте, я хочу вызвать ее только один раз, когда добавляю этот фрагмент в framelayout из MainActivity
, но вызов его в 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);
}
}
}
}
Я пытался вызвать getTags () в onCreate ()но тогда представление рециркулятора просто не загрузится.
Также побочный вопрос: Представьте, что в framelayout загружен фрагмент, чтопроисходит, когда пользователь нажимает кнопку «Домой» на устройстве, а затем открывает приложение из последних?вызывается saveInstanceState или он вызывается только тогда, когда я заменяю этот фрагмент другим, а затем нажимаю назад, чтобы вернуться к этому фрагменту?что именно происходит?