Фрагмент вызова функции только один раз - PullRequest
0 голосов
/ 04 декабря 2018

Итак, у меня есть функция 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 или он вызывается только тогда, когда я заменяю этот фрагмент другим, а затем нажимаю назад, чтобы вернуться к этому фрагменту?что именно происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...