当我启动应用程序时,如何保存我的ListView再次打开它?

时间:2016-02-19 16:58:32

标签: listview

嗨,我真的很喜欢编程,所以很抱歉我犯了错误,我的问题是我想要一个动态列表视图。 到目前为止我得到了我的代码,我可以在列表视图中添加新值。但如果我关闭应用程序并重新启动它们就会消失。

所以现在我正在搜索将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

1 个答案:

答案 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'
}