当我们更改主题时,适配器会变为 null,并且当我们使用 addTask 函数时,应用程序会崩溃

问题描述 投票:0回答:1

package com.example.myapplication;

import android.content.Context;
import android.os.Bundle;

import androidx.annotation.NonNull;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.Toast;

import java.util.ArrayList;

public class ToDoFragment extends Fragment {

Context context;
LinearLayout no_tasks;
RecyclerView tasks_list;
ToDoRecyclerAdapter adapter;
ArrayList<Task_Model> arrTask;

public ToDoFragment(){

}

public ToDoFragment(ArrayList<Task_Model> arrTask){
    this.arrTask = arrTask;
}

@Override
@SuppressWarnings("unchecked")
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_to_do, container, false);

    tasks_list = rootView.findViewById(R.id.tasks_list);       

    no_tasks = rootView.findViewById(R.id.no_tasks);

    context = requireActivity().getApplicationContext();

    tasks_list.setLayoutManager(new LinearLayoutManager(context));

    if (savedInstanceState != null) {
        arrTask = (ArrayList<Task_Model>) savedInstanceState.getSerializable("tasks");
    }

    adapter = new ToDoRecyclerAdapter(arrTask);
    tasks_list.setAdapter(adapter);

    if(tasksPresent()){
        no_tasks.setVisibility(View.INVISIBLE);
    }else{
        no_tasks.setVisibility(View.VISIBLE);
    }

    return rootView;
}

@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putSerializable("tasks", arrTask);
}

public void addTask(String task_name, String task_desc, char priority){

    arrTask.add(new Task_Model(task_name, task_desc, priority));

    if(adapter != null) {
        adapter.notifyItemInserted(arrTask.size() - 1);
    }

}

public boolean tasksPresent(){

    return arrTask.size() > 0;

}

}

我期望当我在将主题从暗到亮或从亮到暗切换后使用 addTask 函数时,适配器不能为空,如何解决这个问题。我正在制作一个看起来像谷歌任务的应用程序,但是当我切换主题并且适配器变为空时,应用程序崩溃了。如何解决这个问题。

Lorem Ipsum 只是印刷和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业标准的虚拟文本,当时一位不知名的印刷商拿走了一堆字体并将其打乱以制作一本字体样本簿。它不仅经历了五个世纪的考验,而且跨越了电子排版的时代,基本保持不变。它在 20 世纪 60 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而流行起来,最近又随着包含 Lorem 版本的 Aldus PageMaker 等桌面出版软件而流行。

android android-recyclerview realmrecyclerviewadapter
1个回答
0
投票

如果您的适配器变为空,最安全的方法是在 onCreateView 中初始化适配器,无论 savingInstanceState 的状态如何,您都可以确保在由于主题更改而重新创建片段时适配器永远不会为空。 尝试将此代码添加到您的 onCreateView 方法

adapter = new ToDoRecyclerAdapter(arrTask);
tasks_list.setAdapter(adapter);
© www.soinside.com 2019 - 2024. All rights reserved.