如何从第二个开始编辑 MainActivity 中的 ArrayList activity

How to edit ArrayList in MainActivity from second activity

我在 MainActivity 中有一个 ArrayList,我想在 ActivityB 中修改该列表。我将如何实现这一目标?

我目前的解决方案是将 ArrayList 设为静态变量,以便我可以使用 MainActivity.ArrayListActivityB 中访问它。但是,我已经看到这可能不是好的做法,也不是很好的信息隐藏。这个列表是我唯一的静态变量。我可以继续使用这种方法还是做其他事情会更好?如果是这样,我还能怎么做?

也许您可以尝试将此数组从 MainActivity 发送到 SecondActivty 并在您的 SecondActivity 中以您想要的方式更改该数组时 您可以将它发送回去MainActivity?这是示例代码,我将 int(名为 myValue)从 MainActivity 发送到 SecondActivity 并在那里进行更改。然后发回给MainActivity

主要活动:

public class MainActivity extends AppCompatActivity
{
    private static final int LAUNCH_SECOND_ACTIVITY = 1;
    public static final String MY_VALUE_KEY = "MY_VALUE_KEY";
    private int myValue = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.d("MyTag", "MAIN ACTIVITY. On create, myValue = " + myValue);

        findViewById(R.id.buttonGoToSecond).setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                startSecondActivity();
            }
        });
    }

    private void startSecondActivity()
    {
        Intent i = new Intent(this, SecondActivity.class);
        i.putExtra(MY_VALUE_KEY, myValue);
        startActivityForResult(i, LAUNCH_SECOND_ACTIVITY);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == LAUNCH_SECOND_ACTIVITY)
        {
            if (resultCode == Activity.RESULT_OK)
            {
                myValue = data.getIntExtra(MY_VALUE_KEY, -1);
                Log.d("MyTag", "MAIN ACTIVITY. Result, myValue = " + myValue);
            }
            else if (resultCode == Activity.RESULT_CANCELED)
            {
                Log.d("MyTag", "No result");
            }
        }
    }
}

第二个活动:

public class SecondActivity extends AppCompatActivity
{
    private int dataFromMain;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        // Get data from MainActivity
        dataFromMain = getIntent().getIntExtra(MainActivity.MY_VALUE_KEY, -1);
        Log.d("MyTag", "SECOND ACTIVITY. Data retrieved: " + dataFromMain);


        //Do something with data
        dataFromMain *= 2;

        findViewById(R.id.buttonGoToMain).setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                goToMain();
            }
        });
    }

    private void goToMain()
    {
        Intent returnIntent = new Intent();
        Log.d("MyTag", "SECOND ACTIVITY. Data send back: " + dataFromMain);
        returnIntent.putExtra(MainActivity.MY_VALUE_KEY, dataFromMain);
        setResult(Activity.RESULT_OK, returnIntent);
        finish();
    }
}

日志如下所示:

D/MyTag: MAIN ACTIVITY. On create, myValue = 1
D/MyTag: SECOND ACTIVITY. Data retrieved: 1
D/MyTag: SECOND ACTIVITY. Data send back: 2
D/MyTag: MAIN ACTIVITY. Result, myValue = 2