java - 如何在不访问其他活动的情况下将 arraylist 从活动发送到另一个活动
问题描述
我之前试图得到一个答案,但找不到一个可以解决我的问题的答案。我正在制作保持圆盘高尔夫分数的应用程序。我的 MainActivity 有 4 个按钮。新游戏,恢复游戏,课程和球员。
Atm 当用户进入 ActivityPlayers(主要活动中的播放器按钮)时,用户可以添加和删除播放器,并且共享首选项会保存该列表。但是现在我还需要以某种方式获取相同的玩家列表,到那个 ActivityNewGame(主要活动中的新游戏按钮),我需要遍历该列表,并使用这些名称在 ActivityNewGame 列表中创建新项目。(不能直接从 ActivityPlayers 复制列表,因为在那个 recyclerview 中,这些项目具有与新游戏 recyclerview 不同的按钮,即使它们使用相同的名称列表。)
我试图做意图,但我意识到我不能使用它,因为当用户从 ActivityPlayers 添加或删除玩家时,我必须访问那个 ActivityNewGame ......
这是我尝试过的方式
这是我的 ActivityPlayers.java 方法。当用户向 mNamelist 添加新名称时,将调用此方法。
private void addItem(int position) {
/** Get user input (name) **/
textAdd = findViewById(R.id.name_input);
/** Add name to the list **/
mNameList.add(position, new NameItem(textAdd.getText().toString().trim()));
/** sort that list **/
sortArrayList();
/** save changes to shared preferences **/
saveData();
/** Show changed list to user **/
mAdapter.notifyItemInserted(position);
/** Clear the input field **/
textAdd.getText().clear();
/** Send namelist to ActivitynewGame **/
Intent i = new Intent(ActivityPlayers.this, ActivityNewGame.class);
i.putExtra("PlayerList", mNameList);
startActivity(i);
}
这是我的 savedata() 方法,用于保存用户对 ActivityPlayers 中的名称列表所做的更改:
private void saveData() {
SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
String json = gson.toJson(mNameList);
editor.putString("task list", json);
editor.apply();
}
这是我的 ActivityNewGame:
public class ActivityNewGame extends AppCompatActivity {
private ArrayList<NewGamePlayerItem> mPlayerList;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_game);
mPlayerList = new ArrayList<>();
Intent intent = getIntent();
ArrayList<NameItem> mNameList = (ArrayList<NameItem>) intent.getSerializableExtra("PlayerList");
/** Check if mNameList has any items in it. **/
if (mNameList.size() != 0) {
/** Loop through that arraylist and set its names into this Activity items. ("true" is for checkbox that this item has.) **/
for (int i = 0; i < mNameList.size(); i++) {
mPlayerList.add(new NewGamePlayerItem(true, mNameList.get(i).getText1()));
}
}
buildRecyclerView();
}
这里的问题是我不想访问 ActivityNewGame,我只想从 ActivityPlayers 传递那个名单,当用户选择去制作一个新游戏(ActivityNewGame)时,那个玩家名单就会在那里。那么我应该做些什么不同的事情来做到这一点呢?
如果你有想法,请给我一些想法的例子,谢谢。
解决方案
在 ActivityPlayers.java addItem() 方法中,将数据保存在共享首选项中。
private void addItem(int position) {
/** Get user input (name) **/
textAdd = findViewById(R.id.name_input);
/** Add name to the list **/
mNameList.add(position, new NameItem(textAdd.getText().toString().trim()));
/** sort that list **/
sortArrayList();
/** save changes to shared preferences **/
saveData();
/** Show changed list to user **/
mAdapter.notifyItemInserted(position);
/** Clear the input field **/
textAdd.getText().clear();
/** save data to shared pref **/
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
try {
editor.putString(<KEY_NAME>, ObjectSerializer.serialize(mNameList));
} catch (IOException e) {
e.printStackTrace();
}
editor.commit();
}
并在 ActivityNewGame.java 中像这样从共享首选项中提取 ArrayList。
mNewNameList = new ArrayList<NewGamePlayerItem>();
// load NewGamePlayerItems from preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
try {
mNewNameList = (ArrayList<NewGamePlayerItem>) ObjectSerializer.deserialize(prefs.getString(<KEY_NAME>, ObjectSerializer.serialize(new ArrayList<NewGamePlayerItem>())));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
推荐阅读
- jmeter - jmeter restful api在报告中获取连接关闭、错误请求和警告
- wordpress - 在产品页面上输入姓名和电子邮件,并在结帐页面上保留输入数据
- libgdx - Libgdx 将对象绘制为黑色而不是彩色
- linux - 了解内核恐慌(带有内核的 RHEL (2.6.32-754.23.1.el6.x86_64))
- php - $FILES 数组不是多个
- pandas - Pandas 数据框中的分组条目,其中行具有相同的值
- r - 从另一帧中减去一帧的部分内容(并匹配标题)
- javascript - 是否可以从另一个 AJV 定义中引用枚举中的属性名称?
- linux - 如何让 sed 在第一场比赛而不是之后退出?
- python - 如何在 tensorflow 2.0 中支持自定义量化?