访问未启动的活动中的TextView

时间:2016-03-04 04:29:42

标签: android

我有一个设置按钮,用于启动SettingsMenu.class。在那里,有一个按钮可以重置你的统计数据,重置后我需要刷新TextViews。但它们处于尚未启动的活动InventoryMenu.class中。

我不确定如何解决这个问题,我将尝试查看是否可以在按下重置按钮后启动InventoryMenu.class,因此我没有得到NullPointerException。但启动InventoryMenu.class的问题是它打开了库存

刷新SettingsMenu.class中的TextView -

InventoryMenu inv = new InventoryMenu();
TextView t1 = inv.t1;
t1.setText("");

在InventoryMenu.class中获取尚未启动的TextView -

public TextView t1 = (TextView) findViewById(R.id.inventorySlot1);

2 个答案:

答案 0 :(得分:0)

您是否将Android ContextgetApplicationContext())传递给SettingsMenu类作为参数,是否需要对所有文本视图可访问的相应布局进行充气?

只有这样,我们才能加载所有TextViewsetText,或重置您要对其执行的任何操作。

答案 1 :(得分:0)

您不应尝试访问尚未启动的活动中的某些内容。此外,你永远不应该通过调用它的构造函数来创建一个活动:

new InventoryMenu()

你应该做的是反过来。您应该访问InventoryMenu活动onCreate

中的设置

但首先,您应该将用户在某个地方设置的新设置放在一起,以便InventoryMenu以后可以访问它。我建议SharedPreferences

将statsReset设置放入共享首选项:

PreferenceManager.getDefaultSharedPreferences(this)
    .edit().putBoolean("statsReset", someBoolean).apply();

其中someBoolean应替换为用户选择的实际值。

现在在InventoryMenu中,检查statsReset是否为真并做相应的事情:

boolean statsReset = PreferenceManager.getDefaultSharedPreferences(this)
    .getBoolean("statsReset", false);

if (statsReset) {
    // change the text of the text view or whatever
} else {
    // do other stuff
}

其中false是默认值。