嗨,我真的很喜欢编程,所以很抱歉我犯了错误,我的问题是我想要一个动态列表视图。 到目前为止我得到了我的代码,我可以在列表视图中添加新值。但如果我关闭应用程序并重新启动它们就会消失。
所以现在我正在搜索将ListView保存在.txt文件中的可能性,我可以在每个应用程序启动时阅读。我发现了这个:
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
但我无法通过列表视图了解我的工作方式。
也许你可以给我一些帮助
BG
的Fab
答案 0 :(得分:0)
如果您了解SharedPreferences,则可以将列表存储在共享首选项中。使用Gson()将列表转换为json字符串并将该json字符串存储在sharedPreferences中。每次启动应用程序时,检查sharedpreferences中是否有json字符串,如果是,则从该json字符串填充列表。
检查以下代码
创建一个单独的类来管理您的SharedPreferences,因为我有一个类。
public class PrefsManager {
// final string below representing name of sharedPreferences
private final String SHARED_PREFERENCES="com.example.myApp.sharedPreferences";
private final String TASKS_LIST="tasks_list";
private final String IS_TASKS_LIST_AVAILABLE="is_tasksList_available";
private static PrefsManager prefsManager=null; //reference to PrefsManager object
private Context context;
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
// constructor is private in order
//to make this class a Singleton
private PrefsManager(Context context){
this.context=context;
sharedPreferences=context.getSharedPreferences(SHARED_PREFERENCES,context.MODE_PRIVATE);
editor=sharedPreferences.edit();
}
//public method used to make an object of PrefsManager class,
//and return reference of it.
public static synchronized PrefsManager getPrefsManager(Context context){
if(prefsManager==null){
prefsManager=new PrefsManager(context);
}
return prefsManager;
}
//public method which receive list of Task,
//convert it to Json String, and stores in sharedpreferences
public void saveTasksList(List<Task> tasksList){
if(tasksList.size()>0){
editor.putBoolean(IS_TASKS_LIST_AVAILABLE,true);
editor.putString(TASKS_LIST,new Gson().toJson(tasksList)); // if size > 0, save the list
}
else{
editor.putBoolean(IS_TASKS_LIST_AVAILABLE,false);
editor.putString(TASKS_LIST,""); // else save empty string in sharedpreferences
}
editor.apply();
}
// check if list is saved in sharedpreferences or not and return true or false
public boolean isTasksListAvailable(){
return sharedPreferences.getBoolean(IS_TASKS_LIST_AVAILABLE,false);
}
// public method which convert stored json string into
// ArrayList<Task> and return this list.
public ArrayList<Task> getTasksList(){
return new Gson().fromJson(sharedPreferences.getString(TASKS_LIST,""),
new TypeToken<ArrayList<Task>>(){}.getType());
}
}
在我的活动中,我声明了一个任务列表如下。
public class MyActivity extends Activity{
private TodaysTasks_Adapter adapter;
private List<Task> tasksList;
RecyclerView rvTodaysTask;
private PrefsManager prefsManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activit_addnewtask);
rvTodaysTask.setLayoutManager(new LinearLayoutManager(getActivity()));
rvTodaysTask.setHasFixedSize(true);
tasksList=new ArrayList<>();
prefsManager=PrefsManager.getPrefsManager(getActivity());
if(prefsManager.isTasksListAvailable()){
tasksList.addAll(prefsManager.getTasksList());
}
adapter=new TodaysTasks_Adapter(getActivity(), tasksList);
rvTodaysTask.setAdapter(adapter);
}
@Override
public void onPause() {
super.onPause();
prefsManager.saveTasksList(tasksList);
}
}// activity ends here
记住我正在使用任务列表。任务是我的应用程序中的对象。您可以使用字符串列表或任何自定义对象。
此外,您还需要在gradle依赖项中包含Gson库,如下所示
dependencies {
compile 'com.google.code.gson:gson:2.3'
}