在可序列化之后使用 onBackPressed() 发回列表

Posted

技术标签:

【中文标题】在可序列化之后使用 onBackPressed() 发回列表【英文标题】:Send back List with onBackPressed() after Serializable 【发布时间】:2017-09-10 02:00:35 【问题描述】:

如何在活动 B 中的 onBackPressed() 操作后更新列表值,并将此更改保存在活动 A 中的列表中。

活动 A:

Intent order = new Intent(getApplicationContext(), OrderActivity.class);
                    Bundle args = new Bundle();
                    args.putSerializable("order", (Serializable) orderPositions);
                    order.putExtra("order", args);
                    startActivity(order);

活动 B:

@Override
public void onBackPressed()

    new AlertDialog.Builder(this)
            .setCancelable(false)
            .setMessage("Are you sure you want to cancel?")
            .setPositiveButton("Yes", new DialogInterface.OnClickListener()
            
                @Override
                public void onClick(DialogInterface dialog, int which)
                
                    menuActivity.setOrderPositions(orderPositions);
                    finish();
                    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
                
            )
            .setNegativeButton("No", null)
            .show();

我在活动 A 中也有 List setter (menuActivity.setOrderPositions(orderPositions);) 但之后我有 null List。 有什么解决办法吗?

【问题讨论】:

【参考方案1】:

finish() 调用之前,您需要在第一个活动中startActivityForResult 和在第二个活动中setResult(Activity.RESULT_OK, <YOUR_LIST>)。在第一个活动中获取onActivityResult 方法中的数据。

但我建议使用一些存储(例如,数据库)来存储您的数据并接受来自任何活动的数据。

或者您可以创建一些单例并将您的列表存储在实例中。

【讨论】:

【参考方案2】:

调用 "adapter.notifyDataSetChanged();" 关于活动 A 的 onResume() 方法 注意:adapter 是我们为 listview 定义的 adpater 类。它将刷新列表视图。我在我的情况下使用它,它对我有用

【讨论】:

【参考方案3】:

我已经制定了涉及重复位置计数和删除重复位置的方法。

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public void checkForDuplicates(ArrayList<OrderSchema> orderPositions)

    for(int i = 0; i < orderPositions.size(); i++) 
    
        for (int j = i+1; j < orderPositions.size(); j++) 
        
            if (Objects.equals(orderPositions.get(i).getPositionID(), orderPositions.get(j).getPositionID()) && (i != j))
            
                Integer count = orderPositions.get(i).getCount();
                count += 1;
                orderPositions.get(i).setCount(count);

                orderPositions.remove(j);
                j = j -1;
            
        
    

【讨论】:

以上是关于在可序列化之后使用 onBackPressed() 发回列表的主要内容,如果未能解决你的问题,请参考以下文章

在可序列化的 C# 类上使用没有 XmlArray 的 XmlArrayItem 属性

在可序列化类中传递对象捆绑意图

浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题

浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题

onBackPressed() 使用

安卓中onBackPressed ()方法的使用