为什么恢复片段状态时setText()不起作用

问题描述 投票:0回答:1

我正在尝试完成一个井字游戏应用程序的编码,该应用程序使用同一片段的两个实例进行通信,以便每个玩家都可以在自己的网格上玩游戏as show here。该应用程序正常运行,但是旋转后我无法恢复该应用程序的状态。为此,我使用位于另一个名为ArrayPersistence的类中的静态ArrayList:

private static ArrayList<String> stringArrayList;

public ArrayPersistence(){}

public static void setStringArrayList(String[][] buttons)
{
    stringArrayList = new ArrayList<>(9);
    for(int i = 0; i < 3; i++)
        for(int y = 0; y < 3; y++)
        {
            stringArrayList.add(buttons[i][y]);
        }
    //System.out.println(stringArrayList);
}

public static ArrayList<String> getStringArrayList()
{
    //System.out.println(stringArrayList);
    return stringArrayList;
}

[使用onSaveInstanceState方法,我保存按钮上显示的文本:

@Override
public void onSaveInstanceState(Bundle b)
{
    String[][] string = new String[3][3];
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            string[i][j] = buttons[i][j].getText().toString();
        }
    }
    ArrayPersistence.setStringArrayList(string);

    int y = 1;
    b.putInt("rebooted", y);
    super.onSaveInstanceState(b);
}

使用onActivityCreated我尝试恢复文本

@Override
public void onActivityCreated(Bundle b)
{
    super.onActivityCreated(b);
    if(b != null)
    {
        if (b.getInt("rebooted") == 1)
        {
            ArrayList<String> string = ArrayPersistence.getStringArrayList();
            System.out.println("Arraylist printed by onActivityCreated: "+string);
            int i = 0;

            for (int x = 0; x < 3; x++)
                for (int y = 0; y < 3; y++)
                {
                    String s = string.get(i);
                    buttons[x][y].setText(s);//<--------------------------------problem here
                }
        }
    }
}

二维数组用于存储九个按钮的ID。该应用程序在编译或运行时未显示任何错误,我只是无法在按钮上设置保存的文本。我添加了一些system.out以打印整个arraylist,以确保所有内容都已正确保存和检索,但无法弄清楚为什么setText()无法设置保存的文本

java android settext
1个回答
0
投票

您可以尝试使用onViewStateRestored(Bundle savedInstanceState)onViewStateRestored(Bundle savedInstanceState)生命周期方法。

只需从Fragments中删除代码,然后将所有代码放入onActivityCreated(Bundle b)方法中。

© www.soinside.com 2019 - 2024. All rights reserved.