将 saveInstanceState 与 Uri ArrayList 和适配器一起使用
Use saveInstanceState with Uri ArrayList and adapter
我创建了一个列表视图,用于将文件从 SD 卡上传到列表并将其附加到列表中。然而我退出了 activity 并且 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;
//点击按钮"Upload to List"时将文件添加到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");
}
在 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
中设置断点以查看正在调用的内容。
我创建了一个列表视图,用于将文件从 SD 卡上传到列表并将其附加到列表中。然而我退出了 activity 并且 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;
//点击按钮"Upload to List"时将文件添加到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");
}
在 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
中设置断点以查看正在调用的内容。