Android:在应用关闭后将值保留在列表中 [英] Android: keep values in list after app shutdown

查看:111
本文介绍了Android:在应用关闭后将值保留在列表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在尝试开发一个用作购物清单的应用,其中用户在 EditText 中输入文字,然后按 Button ,然后保存值添加到 List 中,然后使用其值更新 ListView .该应用程序运行良好,但当用户退出该应用程序时除外,在这种情况下,用户输入的所有值都不会保存.到目前为止,这是我尝试存储的 List .

I am currently trying to develop an app that serves as a shopping list, in which the user enters text into an EditText, presses a Button, which then saves the value into a List, which then updates a ListView with its value. The app works great, except when the user exits the app, in which case all of the values that the user enters are not saved. This is what I have tried so far to store the List.

public class MainActivity extends ListActivity {

    private static final String SHARED_PREFS_NAME = "MY_SHARED_PREF";

    ArrayList<String> mylist = new ArrayList<String>();
    ArrayAdapter<String> adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        ListView listview = (ListView) findViewById(android.R.id.list);

        Button btn = (Button) findViewById(R.id.button);

        mylist = (ArrayList<String>) getArray();

        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mylist);

        OnClickListener listener = new OnClickListener() {          
            @Override
            public void onClick(View v) {                               
                EditText edit = (EditText) findViewById(R.id.edittext);
                mylist.add(edit.getText().toString());
                edit.setText("");               
                adapter.notifyDataSetChanged();
            }
        };

        btn.setOnClickListener(listener);

        listview.setAdapter(adapter);   

    }

    public boolean saveArray() {

        SharedPreferences sp = this.getSharedPreferences(SHARED_PREFS_NAME, Activity.MODE_PRIVATE);
        SharedPreferences.Editor mEdit1 = sp.edit();
        Set<String> set = new HashSet<String>();
        set.addAll(mylist);        
        mEdit1.putStringSet("list", set);

        return mEdit1.commit();     

    }

    public List<String> getArray() {

        SharedPreferences sp = this.getSharedPreferences(SHARED_PREFS_NAME, Activity.MODE_PRIVATE);
        Set<String> set = sp.getStringSet("list", new HashSet<String>());
        return new ArrayList<String>(set);
    }

}

以及我的 .xml 布局文件中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/edittext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/edittext"
        android:text="Button" />

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/button" >
    </ListView>

</RelativeLayout>

我拥有它,以便可以将值正确输入到 ListView 中,但是在退出并重新打开应用程序后, ListView 不会保存其值.有人知道为什么会这样吗?

I have it so that the values can be entered into the ListView correctly, but the ListView does not save its values after the app is exited out of and reopened. Does anyone know why this is occurring?

推荐答案

您的问题的解决方案如下:

the solution to your problem is as follows:

由于此链接,我也尝试并重新编写了代码:

I tried and reworked your code also thanks to this link:

public class MainActivity extends ListActivity {

    private static final String SHARED_PREFS_NAME = "MY_SHARED_PREF";
    ArrayList<String> mylist = new ArrayList<String>();
    ArrayAdapter<String> adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listview = (ListView) findViewById(R.id.list);
        Button btn = (Button) findViewById(R.id.button);

        //NOTE: acquire array from shared preferences
        mylist = getArray();

        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mylist);

        OnClickListener listener = new OnClickListener() {          
            @Override
            public void onClick(View v) {                               
                EditText edit = (EditText) findViewById(R.id.edittext);
                mylist.add(edit.getText().toString());
                edit.setText("");               
                adapter.notifyDataSetChanged();
            }
        };
        btn.setOnClickListener(listener);
        listview.setAdapter(adapter);        
    }

    public boolean saveArray() {
        SharedPreferences sp = this.getSharedPreferences(SHARED_PREFS_NAME, Activity.MODE_PRIVATE);
        SharedPreferences.Editor mEdit1 = sp.edit();
        Set<String> set = new HashSet<String>();
        set.addAll(mylist);
        mEdit1.putStringSet("list", set);
        return mEdit1.commit();
    }

    public ArrayList<String> getArray() {
        SharedPreferences sp = this.getSharedPreferences(SHARED_PREFS_NAME, Activity.MODE_PRIVATE);

        //NOTE: if shared preference is null, the method return empty Hashset and not null          
        Set<String> set = sp.getStringSet("list", new HashSet<String>());

        return new ArrayList<String>(set);
    }
}

..并在关闭应用程序之前调用SaveArray()

..and calls SaveArray () before closing the application

public void onStop() {
    saveArray();
    super.onStop();
}

或者,每次添加元素时保存数组(all'onclick按钮会覆盖当前列表中的共享首选项)

or, alternatively, save the array every time you add an element (all'onclick button overwrites the shared preference in the current list)

这篇关于Android:在应用关闭后将值保留在列表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆