我创建了一个列表视图,该列表视图将SD卡中的文件上传到列表并将其附加到列表中。但是我退出了活动,并且调用了onDestroyed,并且我的listView丢失了所有数据。我正在使用ArrayList FileUploaded和适配器上传文件,但是对于如何在“ onSavedInstanceState”方法上实现该方法感到困惑。
我已经做过研究,但仍然有一些问题。
我存储了错误的商品吗?
请帮助...一点建议。
我的变量:
ListView Added_Files;
Button Select_File;
Button Add_To_List;
Button Save_Button;
Button Add_To_DropBox;
TextView selectedFile;
MediaPlayer mediaPlayer;
ArrayList<Uri> FileUpload = new ArrayList<Uri>();
ArrayAdapter adapter;
//当单击“上传到列表”按钮时将文件添加到listView的方法
public void addList(){
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1,FileUpload);
Add_To_List.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Added_Files.setAdapter(adapter);
adapter.add(uri.getPath());
((BaseAdapter) Added_Files.getAdapter()).notifyDataSetChanged();
selectedFile.setText("");
Make_File_Empty();
// Toast.makeText(AddFiles.this, "File Added", Toast.LENGTH_SHORT).show();
}
});
}
这里是选择sd卡上的文件并将其显示在屏幕上的方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CODE:
//If file selection was successfull
if (resultCode == RESULT_OK) {
if (data != null) {
//get uri of the selected file
uri = data.getData();
Log.i(TAG, "Uri = " + uri.toString());
try {
//get file path from Uri
// Toast.makeText(AddFiles.this, "File Selected: " + uri.getPath(), Toast.LENGTH_SHORT).show();
selectedFile.setText("Selected File: " + uri.getPath());
addList();
} catch (Exception e) {
Log.e("FileSelectorActivity", "File select error", e);
}
super.onActivityResult(requestCode, resultCode, data);
}
}
}
}
最后,onSaved / restore方法:
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putStringArrayList("key",FileUpload );
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
FileUpload = savedInstanceState.getStringArrayList("key");
}
答案 0 :(得分:1)
在onSaveInstanceState
中,您似乎在调用super之后正在保存状态,这可能会导致数据无法保存。您可能还需要保存和还原TextView中的文本,以便在还原UI时显示该文本。
要注意的另一件事是它在这里所说的:Note: onSaveInstanceState() is not called when the user explicitly closes the activity or in other cases when finish()is called.
保存状态仅用于在短期情况下保存数据(本示例在调用super之前保存数据),如果要保存更长的时间(在应用启动之间),则可能需要使用大量的SQLite数据库更复杂。
我不是这方面的专家,但希望能对您有所帮助!我建议在onSaveInstanceState
和onRestoreInstanceState
中设置断点,以查看是否仍然遇到问题时正在调用什么。