请帮我解决一下我在Android开发项目中使用ListView及其相关数据的问题。
我有一个名为OrderForm的活动,它由活动UserProfile中的Intent启动,如下所示:
在UserProfile中
Intent intent = new Intent(this, OrderForm.class);
startActivity(intent);
然后在OrderForm中有一个EditText和一个添加按钮,用于将String项添加到ArrayList,并相应地填充UI。
当我单击后退按钮(返回到UserProfile)并再次通过Intent转到OrderForm时,UI不会显示列表项,为什么会这样?
我意识到我可以使用Room进行持久性甚至SharedPreferences,但是 我想看看是否有更干净,更有效的方法,否则代码越少越好。
另外,也许我没有正确理解它们,但我尝试了onSaveInstanceState和onRestoreInstanceState,它们不适合我。
提前致谢。
以下是来自 OrderForm
的代码的一部分public class OrderForm extends AppCompatActivity {
ArrayList<String> list;
ListView itemList;
ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_form);
itemList = findViewById(R.id.itemList);
itemText = findViewById(R.id.item);
linearLayout = findViewById(R.id.no_items_container);
orderContainer = findViewById(R.id.orderContainer);
list = new ArrayList<>();
arrayAdapter = new ArrayAdapter<String>(this,
R.layout.list_item,R.id.rowItem, list)
{
@Override
public View getView(int position,
View convertView,
ViewGroup parent) {
// some custom stuff here
}
}
public void addItem(View view)
{
String item = itemText.getText().toString().trim().toLowerCase();
if(!item.isEmpty() && list.indexOf(item) == -1) {
arrayAdapter.add(item);
}
}
答案 0 :(得分:0)
您需要了解活动生命周期的工作原理。
https://developer.android.com/guide/components/activities/activity-lifecycle.html
您的问题是,当按下后退按钮时,您的OrderForm活动将被销毁,并且您的arraylist / list视图将被有效销毁。要避免这个问题,您必须将值存储在某处,例如SharedPreferences,创建一个包含字符串并存储它的文本文件,或者将arraylist返回到您将存储/处理它们的UserProfile类(为此使用startActivityForResult()而不是startActivity())
答案 1 :(得分:0)
当我单击后退按钮(返回到UserProfile)并再次通过Intent转到OrderForm时,UI不会显示列表项,为什么会这样?
在onCreate()
方法中,您有:
list = new ArrayList<>();
arrayAdapter = new ArrayAdapter<String>(..., list)...
除非您以某种方式保留数据,否则在您的活动启动时list
始终为空。
我意识到我可以使用Room进行持久性甚至SharedPreferences,但我想看看是否有更干净,更有效的方法,否则代码越少越好。
您需要存储的确切内容将有助于定义存储它的最佳方式。对于简单的字符串列表,可能SharedPreferences是最简单的解决方案。
另外,也许我没有正确理解它们,但我尝试了onSaveInstanceState和onRestoreInstanceState,它们不适合我。
这些方法用于在活动被销毁然后重新创建时存储数据,这通常在用户旋转设备时发生(但也可能由于各种其他原因而发生)。当您退出您的活动时(通过按back
到UserProfile),这些方法都不会被触发。