如何在不访问其他活动的情况下将数组列表从活动发送到另一个活动

我之前曾尝试为此找到答案,但找不到可以解决我问题的答案。我正在制作保留飞盘高尔夫分数的应用程序。我的 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;

这里的问题是我不想访问 ActivityNewGame,我只想从 ActivityPlayers 传递那个名单,当用户选择去制作一个新游戏(ActivityNewGame)时,那个玩家列表就会在那里。那么我应该做些什么不同的事情来做到这一点呢?


狐的传说
浏览 113回答 3
3回答

翻翻过去那场雪

您可以将列表设为静态,然后就不需要传递它了。您可以在您的应用程序中的任何地方使用它。通过使其静态可能会出现memory leaks问题,因此dispose它们在使用后正确。

拉风的咖菲猫

在 ActivityPlayers.java addItem() 方法中,将您的数据保存在共享首选项中。private void addItem(int position) {&nbsp; &nbsp; /** Get user input (name) **/&nbsp; &nbsp; textAdd = findViewById(R.id.name_input);&nbsp; &nbsp; /** Add name to the list **/&nbsp; &nbsp; mNameList.add(position, new NameItem(textAdd.getText().toString().trim()));&nbsp; &nbsp; /** sort that list **/&nbsp; &nbsp; sortArrayList();&nbsp; &nbsp; /** save changes to shared preferences **/&nbsp; &nbsp; saveData();&nbsp; &nbsp; /** Show changed list to user **/&nbsp; &nbsp; mAdapter.notifyItemInserted(position);&nbsp; &nbsp; /** Clear the input field **/&nbsp; &nbsp; textAdd.getText().clear();&nbsp; &nbsp; /** save data to shared pref **/&nbsp; &nbsp; SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);&nbsp; Editor editor = prefs.edit();&nbsp; try {&nbsp; &nbsp; editor.putString(<KEY_NAME>, ObjectSerializer.serialize(mNameList));&nbsp; } catch (IOException e) {&nbsp; &nbsp; e.printStackTrace();&nbsp; }&nbsp; editor.commit();}并在 ActivityNewGame.java 中像这样从共享首选项中提取 ArrayList。mNewNameList = new ArrayList<NewGamePlayerItem>();&nbsp;// load NewGamePlayerItems from preference&nbsp; SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);&nbsp; try {&nbsp; &nbsp; mNewNameList = (ArrayList<NewGamePlayerItem>) ObjectSerializer.deserialize(prefs.getString(<KEY_NAME>, ObjectSerializer.serialize(new ArrayList<NewGamePlayerItem>())));&nbsp; } catch (IOException e) {&nbsp; &nbsp; e.printStackTrace();&nbsp; } catch (ClassNotFoundException e) {&nbsp; &nbsp; e.printStackTrace();&nbsp; }

烙印99

您可以将数组列表保存在一个文件中。public void save(String fileName) throws FileNotFoundException {String tmp = clubs.toString();PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));pw.write(tmp);pw.close();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java