Java Android在活动之间删除并添加到ArrayList

Java Android在活动之间删除并添加到ArrayList,java,android,Java,Android,我正在制作我的第一个android应用程序,这就是我被卡住的地方。 我有一个活动A,需要挑选4名球员。 我将根据我要填充的玩家传递给活动PickPlayer1,2,3,4 ImageButton addp1 = (ImageButton)findViewById(R.id.player1); addp1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v)

我正在制作我的第一个android应用程序,这就是我被卡住的地方。 我有一个活动A,需要挑选4名球员。 我将根据我要填充的玩家传递给活动PickPlayer
1
2
3
4

ImageButton addp1 = (ImageButton)findViewById(R.id.player1);
addp1.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        Intent i = new Intent(getApplicationContext(), PickPlayer.class);
        i.putExtra("playersList", playersList);
        startActivityForResult(i, 1);
    }
});
PickPlayer
活动中,我有一个填充的列表,每个项目接收一个侦听器

    final ArrayList<Player> playersList = (ArrayList<Player>)getIntent().getSerializableExtra("playersList");
    lv.setAdapter(new PlayerItemAdapter(this, android.R.layout.simple_list_item_1, playersList));
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
            player = playersList.get(position);
            playersList.remove(position);
            Intent intentMessage = new Intent();
            intentMessage.putExtra("player", player);
            intentMessage.putExtra("playersList", playersList);
            setResult(RESULT_OK, intentMessage);
            finish();
        }
    });`
final ArrayList playersList=(ArrayList)getIntent().getSerializableExtra(“playersList”);
lv.setAdapter(新的PlayerItemAdapter(这个,android.R.layout.simple_list_item_1,playerList));
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(适配器视图适配器、视图视图、整型位置、长参数){
player=playersList.get(位置);
播放列表。移除(位置);
Intent intentMessage=新Intent();
intentMessage.putExtra(“播放器”,播放器);
intentMessage.putExtra(“playersList”,playersList);
setResult(RESULT_OK,intentMessage);
完成();
}
});`
通过在活动A上创建
playerList
,并每次将其从一个列表传递到另一个列表,并在单击时将播放器从playerList中删除,上述操作非常有效。 问题是,如果一名球员被错误地选中,一旦被其他人替换,他就需要再次被放回名单

有什么关于实施的建议吗? 我想到的一种方法是从活动A传给玩家(如果一个玩家已经被分配到他的位置),然后再次将他读给玩家列表,但我相信有更好的方法。 我是android新手,所以我对资源和最佳实践一无所知。 (通过活动或id传递对象并运行db查询的示例)


谢谢

当您通过一个Intent的bundle(
i.putExtra(“playersList”,playersList);
)发送对象时,它会被编组,然后在另一端(新活动)被解编。这意味着您有两个ArrayList及其内容的实例(每个活动中一个)。如果您希望在活动A和活动B之间共享数据,我建议您将其存储在应用程序实例上或使用单例


如果您的数据来自数据库,则可以通过intent传递id,并通过数据库查询获得玩家列表和特殊玩家

IMO,使用一个单例类(或应用程序实例上的方法——这是一个很好的stackoverflow问题)将获得最佳结果

您的数组将是singleton的一个内部成员,并具有一个布尔属性,以指示是否已选中某个播放器。使用此属性的某些方法可以实现如下:

  • 列出GetPickedPlayer()
  • 列出GetNotPickedPlayer()
  • void setPlayerPicked(玩家)
  • void setplayernotpick(玩家)
  • 等等

希望有帮助

不确定这是否是实现这一目标的最佳方式,但我将与大家分享

我将
arrayList
与玩家在活动之间来回移动。 一旦玩家被送回,它将被从中移除并保存在对象
player1
player2
player3
等中


因此,如果用户单击已分配了播放机的按钮,我只需将该播放机再次添加到列表中,并传递
arrayList
,就像它是空的一样。

它来自数据库,但使用该方法,我仍然必须右前右后传递列表?我在寻找其他的选择。PS:您是否建议将玩家
对象
传递给某个活动,或者传递id,然后运行查询以获取玩家信息(
对象
),如果您需要两个活动中的数据库数据,我建议将其设为单例,或者在两个活动中查询数据。关于player实例,只要player不是需要很长时间才能处理的大对象,这两种解决方案都可以。