如何在Android中保存和检索ListItems

如何在Android中保存和检索ListItems,android,Android,如何保存列表项的状态,以便我可以在重新启动手机时检索它。目前在下面的代码中,您可以看到我有一个列表视图,其中有一个列表项。现在我想在onDestroy和onPause期间保存“items”的状态,并在onCreate期间检索回来(这样做的原因是在手机重新启动时检索数据的状态)。有人能帮我写代码吗 public class LogListView extends ListActivity { /** Called when the activity is first created. */

如何保存列表项的状态,以便我可以在重新启动手机时检索它。目前在下面的代码中,您可以看到我有一个列表视图,其中有一个列表项。现在我想在onDestroy和onPause期间保存“items”的状态,并在onCreate期间检索回来(这样做的原因是在手机重新启动时检索数据的状态)。有人能帮我写代码吗

public class LogListView extends ListActivity {
    /** Called when the activity is first created. */
    private static String newString;
    private static EntryAdapter adapter;
    int clickCounter = 0;
    static ArrayList<Item> items = new ArrayList<Item>();
    static SharedPreferences preferences = null;
    private static Context context = null;
    static StringTokenizer tokens;
    private static String first;
    private static String second;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        context = this;
        adapter = new EntryAdapter(this, items);
        // items.add(new SectionItem("Log Report"));
        setListAdapter(adapter);

        if (adapter.getCount() != 0) {
            // Do nothing Adapter has value
        } else {
            Toast.makeText(LogListView.this, "No Items Available",Toast.LENGTH_SHORT).show();
            //Retrive Preference here when Adapter is null

        }

    }

    // Method which will handle dynamic insertion
    public static void addItems() {

        preferences = context.getSharedPreferences("LOG",android.content.Context.MODE_PRIVATE);
        newString = preferences.getString("log", "");

        tokens = new StringTokenizer(newString, ",");
        first = tokens.nextToken();
        second = tokens.nextToken();

        items.add(new EntryItem(first, second));
        adapter.notifyDataSetChanged();

    }
    // Method which will handle dynamic insertion ends

    @Override
    public void onDestroy() {
        super.onDestroy();

        //Save preference here


    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {

        if (!items.get(position).isSection()) {

            items.get(position);
            // Toast.makeText(this, "You clicked " + item.title ,
            // Toast.LENGTH_SHORT).show();
            Toast.makeText(this, "You clicked " + position, Toast.LENGTH_SHORT)
                    .show();

        }

        if (position == 9) {

        }

        super.onListItemClick(l, v, position, id);
    }
}
公共类LogListView扩展了ListActivity{
/**在首次创建活动时调用*/
私有静态字符串新闻字符串;
专用静态入口适配器;
int clickCounter=0;
静态ArrayList项=新ArrayList();
静态SharedReferences首选项=null;
私有静态上下文=null;
静态StringTokenizer令牌;
私有静态字符串优先;
私有静态字符串第二;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
上下文=这个;
适配器=新入口适配器(此,项);
//添加(新章节项目(“日志报告”);
setListAdapter(适配器);
if(adapter.getCount()!=0){
//什么都不做适配器有价值
}否则{
Toast.makeText(LogListView.this,“无可用项”,Toast.LENGTH_SHORT.show();
//当适配器为空时,在此处检索首选项
}
}
//将处理动态插入的方法
公共静态void addItems(){
首选项=context.getSharedReferences(“LOG”,android.content.context.MODE\u PRIVATE);
newString=preferences.getString(“log”,即“”);
标记=新的字符串标记器(newString,“,”);
first=tokens.nextToken();
second=tokens.nextToken();
添加(新条目项(第一、第二));
adapter.notifyDataSetChanged();
}
//方法,该方法将处理动态插入端点
@凌驾
公共空间{
super.ondestory();
//在此处保存首选项
}
@凌驾
受保护的void onListItemClick(列表视图l、视图v、整数位置、长id){
如果(!items.get(position.isSection()){
项目。获取(位置);
//Toast.makeText(此“您单击了”+item.title,
//吐司。长度(短)。show();
Toast.makeText(这个“您点击了”+位置,Toast.LENGTH\u SHORT)
.show();
}
如果(位置==9){
}
super.onListItemClick(左、右、位置、id);
}
}

如果我必须将列表保存到SharedReferences,我总是选择执行以下操作,但您需要Gson库来完成此操作

首先将列表转换为JSON字符串:

Type listOfObjects = new TypeToken<List<YourObject>>(){}.getType();
String json = gson.toJson(list, listOfObjects);
Type listOfObjects=new-TypeToken(){}.getType();
字符串json=gson.toJson(列表,ListoObject);
然后将字符串保存到首选项。要将json转换回列表,请执行以下操作:

Type listOfObjects = new TypeToken<List<YourObject>>(){}.getType();
List<YourObject> list = gson.fromJson(json, listOfObjects);
Type listOfObjects=new-TypeToken(){}.getType();
List=gson.fromJson(json,listOfObjects);

@Torben:不,这是完全不同的问题,是同一个问题。您正在保存的“状态”是列表的内容。从阅读链接和实现基本状态保存样板开始。然后,如果你在保存实际项目时遇到困难,回来问一个更详细的问题。StackOverflow的目的不是为了得到现成的解决方案。我们为您提供信息指南,以便您可以自己学习。我给了你一个,所以请礼貌一点,在自动驳回之前先去研究一下。