在活动之间保留 ListView 项目

Posted

技术标签:

【中文标题】在活动之间保留 ListView 项目【英文标题】:Keep ListView items between activities 【发布时间】:2013-06-21 00:59:10 【问题描述】:

所有,

我确实环顾四周并在***上进行了搜索,但我的问题没有得到解答,或者我只是搜索错误。

我有一个列表视图,它显示文本和按钮。单击此按钮时,我将打开另一个活动,其中不同的列表传递上一个活动的文本。

现在,当我按下“返回”按钮时,我将返回“Activity1”。在这里,我可以在同一行或不同的行上再次按下按钮,我应该转到“Activity2”,它需要将先前放置的文本保留在“listview_Activity2”中,并从“listview_Activity1”添加新选择的文本。

我确实为列表视图创建了一个自定义适配器,并且“Activity1”在第一次按下按钮时工作正常。但是,在第二次按下时,应用程序不会保留第一个选定的文本。

现在,无论我在哪里看到它要么通过按下按钮从同一活动添加项目到列表视图,要么保持列表视图项目状态。我根本不关心项目状态,我的项目来自另一个活动。

有人可以帮忙吗?

代码如下:

private static List<Product> products;

@Override
public void onCreate(Bundle savedInstance)

    super.onCreate( savedInstance );
    products = new ArrayList<Product>();
    Intent intent = getIntent();
    Product product = intent.getParcelableExtra( "cart_product" );
    products.add( product );
    CartLineAdapter adapter = new CartLineAdapter( this, R.layout.cart_line, products );
    setContentView( R.layout.cart );
    ListView view = (ListView) findViewById( R.id.cart_items );
    view.setAdapter( adapter );

【问题讨论】:

【参考方案1】:

您需要对数据有一些持久性。如果您只想在当前在应用程序中保留它,那么您可以使用static 变量。创建一个包含static ArrayList 或类似内容的类,在从第一个Activity 的列表中选择一个项目后,您将向其中添加数据。然后,每次您转到第二个 Activity 时,您都可以使用来自该 static ArrayList 的数据填充您的列表。

您的其他选择是将此数据存储在SharedPreferences(可能不适合这种情况,但也许)或DB,如果您希望它在应用程序关闭时保持不变。

编辑

对于任何选项,您都可以覆盖 onBackPressed()

@Override
public void onBackPressed()

    // save data here if it hasn't yet been saved
    super.onBackPressed();

Storage Options

【讨论】:

对于数据库解决方案,是否可以按下“返回”按钮?我在第二个列表视图上有一个文本控件,用户将在其中输入数据(数量),因此我无法立即保存。 谢谢。我将使用数据库解决方案。

以上是关于在活动之间保留 ListView 项目的主要内容,如果未能解决你的问题,请参考以下文章

列表视图在android中不起作用

WPF listview如何在行列之间添加分割线,类似DataGrid的效果

更新 ListView 中的特定项目

如何检查 ListView 项目是不是被选中

Android App 在片段中创建 ListView 引用时关闭

Flutter - 如何在 Listview 构建器顶部添加项目?