Java 按正确顺序保存和显示ArrayList

Java 按正确顺序保存和显示ArrayList,java,android,arrays,listview,Java,Android,Arrays,Listview,我是一名初级开发人员,对如何保存屏幕实例几乎没有经验 活动: handler = new Handler() ; ListElementsArrayList = new ArrayList<String>(Arrays.asList(ListElements)); adapter = new ArrayAdapter<String>(Processing.this, android.R.layout.simple_list_i

我是一名初级开发人员,对如何保存屏幕实例几乎没有经验

活动:

 handler = new Handler() ;

    ListElementsArrayList = new ArrayList<String>(Arrays.asList(ListElements));

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

    listView.setAdapter(adapter);


    btnShippersCompleted.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            shippersCompleted = textView.getText().toString();
            ListElementsArrayList.add(shippersCompleted + "- Hour " + Hour++);
            adapter.notifyDataSetChanged();
        }
    });

我的应用程序所做的是,用户每小时输入一些已完成的(X)。我想做的是,当用户离开此页面并转到另一个活动,然后返回时,列表将保留

我尝试使用此代码:

 @Override
protected void onPause() {
    super.onPause();
    //Set the values
    sharedPreferences = getSharedPreferences("MYPREFS", MODE_PRIVATE );
    SharedPreferences.Editor editor = sharedPreferences.edit();
    Set<String> set = new HashSet<String>();
    set.addAll(ListElementsArrayList);
    editor.putStringSet("list", set);
    editor.apply();
    }


@Override
public void onResume() {
    super.onResume();
    sharedPreferences = getSharedPreferences("MYPREFS", MODE_PRIVATE );
    SharedPreferences.Editor editor = sharedPreferences.edit();
    Set<String> set = sharedPreferences.getStringSet("list", null);
    ListElementsArrayList.addAll(set);
    listView.setAdapter(adapter);
}
@覆盖
受保护的void onPause(){
super.onPause();
//设置值
SharedReferences=GetSharedReferences(“MYPREFS”,MODE_PRIVATE);
SharedReferences.Editor=SharedReferences.edit();
Set=newhashset();
set.addAll(listlementsarraylist);
编辑器.putStringSet(“列表”,set);
editor.apply();
}
@凌驾
恢复时公开作废(){
super.onResume();
SharedReferences=GetSharedReferences(“MYPREFS”,MODE_PRIVATE);
SharedReferences.Editor=SharedReferences.edit();
Set Set=SharedReferences.getStringSet(“列表”,null);
listlementsarraylist.addAll(set);
setAdapter(适配器);
}
要添加到列表的代码:

 handler = new Handler() ;

    ListElementsArrayList = new ArrayList<String>(Arrays.asList(ListElements));

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

    listView.setAdapter(adapter);


    btnShippersCompleted.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            shippersCompleted = textView.getText().toString();
            ListElementsArrayList.add(shippersCompleted + "- Hour " + Hour++);
            adapter.notifyDataSetChanged();
        }
    });
handler=newhandler();
ListElementsArrayList=newarraylist(Arrays.asList(ListElements));
适配器=新阵列适配器(Processing.this,
android.R.layout.simple\u list\u item\u 1,
列表元素列表
);
setAdapter(适配器);
BtnShipperCompleted.setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图){
ShipperCompleted=textView.getText().toString();
添加(shipperperscompleted+“-Hour”+Hour++);
adapter.notifyDataSetChanged();
}
});
尽管我在onResume()方法上收到一个空指针。因此,我将代码添加到重新加载按钮。虽然现在列表出现了问题(见截图),但它仍然有效

我怎样才能:

  • 删除“重新加载”按钮,使列表自动保留

  • 按保存顺序重新加载列表


  • 也许这不是您正在等待的答案,但请尝试使用数据库,因为共享首选项本身会存储一个无序的元素列表(set)。或者,您应该对列表进行排序,然后将其设置为适配器。

    如果要使用共享首选项,则需要保存列表大小并使用for循环保存列表项。我的回答可能会有帮助。