在设备内部保存listview的值

时间:2014-07-11 18:58:10

标签: android listview

我有一个应用程序,我将从微调器中选择的值保存到列表视图中。问题是,当您关闭设备或从多任务中删除应用程序时,再次运行应用程序时列表视图将变为空白。但是,当您从多任务运行应用程序时,值仍然存在,并且它们不会消失。我的代码:

ListActivity.java

package viva.inspection.com.inspectionpicker;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

import viva.inspection.com.inspectionpicker.R;

public class ListActivity extends Activity {
    private static ArrayList<String> inspections = new ArrayList<String>();
    private static ArrayAdapter<String> inspectionAdapter;
    String value;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        ListView inspectionList = (ListView) findViewById(R.id.listView);
        inspectionAdapter  = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, inspections);
        inspectionList.setAdapter(inspectionAdapter);
        if(getIntent().getStringExtra("spins") != null) {
            value = getIntent().getStringExtra("spins");
        }
        if(value != null) {
            addItems(value);
        }
    }

    public static void addItems(String s) {
        inspections.add(s);
        inspectionAdapter.notifyDataSetChanged();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.list, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        switch(id) {
            case R.id.action_settings:
                return true;
            case R.id.action_new:
                startActivity(new Intent(this, MyActivity.class));
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

编辑:我看到this question早些时候问过那种解决我问题的方法。我没有自定义对象的arraylist,但是,它只是字符串的arraylist,所以我如何实现Parcelable接口。

编辑#2:我使用此代码解决了我的问题:

protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putStringArrayList("inspection list", inspections);
}

然后我修改了onCreate方法:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        ListView inspectionList = (ListView) findViewById(R.id.listView);
        inspectionAdapter  = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, inspections);
        inspectionList.setAdapter(inspectionAdapter);
        if(getIntent().getStringExtra("spins") != null) {
            value = getIntent().getStringExtra("spins");
        }
        if(value != null) {
            addItems(value);
        }
        if(savedInstanceState != null ) {
            //Then the application is being reloaded
            inspections = savedInstanceState.getStringArrayList("inspection list");
        }
    }

感谢那些帮助过的人。我很感激。

1 个答案:

答案 0 :(得分:0)

我猜你是从你的应用程序中的活动启动ListActivity,因为你正在从意图中读取额外内容(如果不能随意纠正我)。从多任务启动时它的工作原因是因为通常活动状态在onCreate()中启动,持续到onDestroy()被调用。在您的情况下,这意味着如果您从多任务打开一个应用程序,应用程序可能没有被释放以释放内存,所以它从您停止的地方开始。

如果您在从多任务中删除应用程序后重新打开该应用程序并且不从重定向器中重新选择项目,则意图将没有任何额外内容,因此您最终会得到一个空列表。

如果您希望应用程序跨运行保存状态,您可能希望查看在onPause()onSaveInstanceState()中保留数据的问题。有关保存数据的选项,请参阅here;您选择的内容可能取决于您尝试保存的数据类型。