如何从第二个开始编辑 MainActivity 中的 ArrayList activity
How to edit ArrayList in MainActivity from second activity
我在 MainActivity
中有一个 ArrayList
,我想在 ActivityB
中修改该列表。我将如何实现这一目标?
我目前的解决方案是将 ArrayList
设为静态变量,以便我可以使用 MainActivity.ArrayList
在 ActivityB
中访问它。但是,我已经看到这可能不是好的做法,也不是很好的信息隐藏。这个列表是我唯一的静态变量。我可以继续使用这种方法还是做其他事情会更好?如果是这样,我还能怎么做?
也许您可以尝试将此数组从 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
我在 MainActivity
中有一个 ArrayList
,我想在 ActivityB
中修改该列表。我将如何实现这一目标?
我目前的解决方案是将 ArrayList
设为静态变量,以便我可以使用 MainActivity.ArrayList
在 ActivityB
中访问它。但是,我已经看到这可能不是好的做法,也不是很好的信息隐藏。这个列表是我唯一的静态变量。我可以继续使用这种方法还是做其他事情会更好?如果是这样,我还能怎么做?
也许您可以尝试将此数组从 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