Фрагмент должен быть общедоступным статическим классом для правильного воссоздания из состояния экземпляра - PullRequest
1 голос
/ 25 октября 2019

Я пытаюсь получить фрагмент с некоторой бизнес-логикой, но когда он запускается, я получаю следующую ошибку

Фрагмент должен быть общедоступным статическим классом для правильного воссоздания из состояния экземпляра

Я нашел несколько похожих вопросов, но ответы не помогли в моем случае, так как у меня нет вложенного / анонимного класса, который я мог бы сделать статическим (или я что-то упустил?)

Как я могу решить эту проблему? вопрос?

...

class OverviewFragment extends Fragment {

    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager layoutManager;
    public OverviewFragment(){
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        loadRecords();
        return inflater.inflate(R.layout.fragment_overview, container, false);
    }

    public void drawCategoryChart(Map<String,Integer> categories) {
        ...
    }
    public void drawUserChart(...) {
        ...
    }
    public void loadRecords(){
        List<Record> records = 
AppDatabase.getAppDatabase(getActivity().getApplicationContext()).recordDao().getAll();
        ...
        RecyclerView recyclerView = (RecyclerView) getView().findViewById(R.id.spendingOverview);
        layoutManager = new LinearLayoutManager(this.getActivity().getApplicationContext());
        recyclerView.setLayoutManager(layoutManager);
        mAdapter = new RecordOverviewRecycleListAdapter(records);
        recyclerView.setAdapter(mAdapter);
    }

    // Returns Map of all categories with their respective sums of all transactions
    public Map<String,Integer> getCategorySums(List<Record> records){
        Map<String,Integer> catSums = new HashMap<String, Integer>();
        for (Record r : records){
            if (!catSums.containsKey(r.getCategory())){
                catSums.put(r.getCategory(),r.getAmount());
            } else {
                catSums.put(r.getCategory(),catSums.get(r.getCategory())+r.getAmount());
            }
        }
        return catSums;
    }

}

1 Ответ

1 голос
/ 25 октября 2019

Ваш файл верхнего уровня не виден в Android Framework для управления FragmentManager.

class OverviewFragment extends Fragment

Вам нужно сделать ваш класс публичным . Не пакет по умолчанию, как у вас сейчас. Ваш фрагмент должен быть определен следующим.

public class OverviewFragment extends Fragment
...