Android 如何在回收器视图中保存适配器内容,以便在关闭应用程序和重新启动适配器时保持相同

Android 如何在回收器视图中保存适配器内容,以便在关闭应用程序和重新启动适配器时保持相同,android,android-studio,Android,Android Studio,这是我到目前为止的主要活动 public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private RecyclerView.Adapter mAdapter; private RecyclerView.LayoutManager layoutManager; private List<userTask> tasklist= new ArrayList<&

这是我到目前为止的主要活动

public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager layoutManager;
private List<userTask>  tasklist= new ArrayList<>();
private userTaskAdapter adapter;
//private Context context;
private static Bundle mBundleState;
private final String KEY_RECYCLER_STATE = "recycler_state";
private Parcelable listState;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recyclerView = (RecyclerView) findViewById(R.id.recycleOne);

    recyclerView.setHasFixedSize(true);

    adapter = new userTaskAdapter(tasklist);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);
    preparetestdata();

}

private void preparetestdata()
{
    String data = "";


    try {

        InputStream fis = MainActivity.this.getResources().getAssets().open("task.txt");
        DataInputStream in = new DataInputStream(fis);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));

        while ((data = br.readLine()) != null)
        {
            String delims = "[:]+";
            String[] temp = data.split(delims);
            String tempTask = new String();
            String tempDescription = new String();
            for (int i=0; i < temp.length; i++)
            {
                if(i == 0)
                    tempTask = temp[i];
                else
                    tempDescription = temp[i];
            }
            userTask tempUser = new userTask(tempTask, tempDescription);
            tasklist.add(tempUser);
        }

    } catch (IOException e)
    {
        e.printStackTrace();
    }
}

/**
 * This function will add new task to task list
 * @param v
 */
public void onAdd(View v)
{
    EditText editTaskTitle = (EditText) findViewById(R.id.taskTitle);
    EditText editDescription = (EditText) findViewById(R.id.taskDescription);
    String tname = editTaskTitle.getText().toString();
    String tdescrip = editDescription.getText().toString();
    userTask task = new userTask(tname, tdescrip);
    tasklist.add(task);
    Log.d("Tname :", tname);
    Log.d("tdescription :", tdescrip);
    try {
        FileOutputStream stream = new FileOutputStream(new File(getFilesDir(), "task.txt"));

        int counter =0;
        for (int i =0; i < tasklist.size(); i++)
        {

            String total = tasklist.get(i).getTName() + " : " + tasklist.get(i).getTDescrip() + "\n";
            stream.write(total.getBytes());
            counter++;
        }
        Toast.makeText(this, "got here", Toast.LENGTH_SHORT).show();
        stream.close();
        adapter.notifyDataSetChanged();
        //recyclerView
        Log.d("UpList", String.valueOf(counter));
    }catch(IOException e) {
        e.printStackTrace();
    }
}




/**
@Override
protected void onSaveInstanceState(Bundle state)
{
    super.onSaveInstanceState(state);
    //state.putSerializable("listdata", adapter.);
}**/

@Override
public void onStop()
{
    super.onStop();
    mBundleState = new Bundle();
    listState = recyclerView.getLayoutManager().onSaveInstanceState();
    mBundleState.putParcelable(KEY_RECYCLER_STATE, listState);

}


@Override
public void onResume()
{
    super.onResume();
    if (mBundleState != null)
    {
        listState = mBundleState.getParcelable(KEY_RECYCLER_STATE);
        recyclerView.getLayoutManager().onRestoreInstanceState(listState);
    }
}
public类MainActivity扩展了AppCompatActivity{
私人回收站;
专用回收器查看适配器mAdapter;
private RecyclerView.LayoutManager LayoutManager;
private List tasklist=new ArrayList();
私有用户任务适配器;
//私人语境;
私人房地产;
私有最终字符串密钥\u RECYCLER\u STATE=“RECYCLER\u STATE”;
私人包裹列表状态;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecycleView=(RecycleView)findViewById(R.id.recycleOne);
recyclerView.setHasFixedSize(true);
适配器=新用户任务适配器(任务列表);
layoutManager=新的LinearLayoutManager(此);
recyclerView.setLayoutManager(layoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(适配器);
preparetestdata();
}
私有void preparetestdata()
{
字符串数据=”;
试一试{
InputStream fis=MainActivity.this.getResources().getAssets().open(“task.txt”);
DataInputStream in=新的DataInputStream(fis);
BufferedReader br=新的BufferedReader(新的InputStreamReader(in));
而((data=br.readLine())!=null)
{
字符串delims=“[:]+”;
字符串[]临时=数据分割(delims);
String testask=新字符串();
字符串tempDescription=新字符串();
对于(int i=0;i

当我添加新任务并退出应用程序时,新任务仍将显示在“回收器”视图中。但当我关闭应用程序时,新任务将不再显示在“回收器”视图中。我正在考虑保存适配器的状态,但不确定如何执行此操作。我尝试过使用可序列化方法,但适配器不可序列化r您的问题?不清楚您认为适配器的状态是什么。但所有信息都在任务列表中,因此保存到getFilesDir()中的task.txt。因此,在应用程序开始时,只需加载该文件,而不是从资源加载的文件。
当我添加新任务并退出应用程序时,新任务仍将在回收器视图中。
??然后所有任务都将消失。
但当我关闭应用程序时,新任务将不会仍在回收器视图中。
。确实如此。但退出和关闭是一样的……我该怎么做将文件从资产中的文件更改为getFilesDir()我知道我必须更改函数preparetestdata()中的InputStream,现在我所需要做的一切都可以完美地工作