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,现在我所需要做的一切都可以完美地工作