2016-03-04 40 views
0

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

我不知道我会如何解决这个问题,我会尝试查看是否可以在按下重置按钮后启动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

在问题中发布您的完整源代码,这种方式我们无法理解更多? – 2016-03-04 04:30:51

+0

这是按下按钮后SettingsMenu.class中的代码 - InventoryMenu inv = new InventoryMenu(); TextView t1 = inv.t1; – CitricThunder

+0

NullPointerException引发此行,这是在尚未启动的活动 - 公共TextView t1 =(TextView)findViewById(R.id.inventorySlot1); – CitricThunder

回答

0

你传递的Android ContextgetApplicationContext())到SettingsMenu类作为参数,并需要膨胀相对应的要求布局,其中所有的文本视图将可用于存取权限S'

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

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是默认值。