2012-11-26 45 views
0

我试图准备一个视图,以便在我切换到该视图之前更新textview中的文本。更改不同视图中的textview

我已经声明了TextView的变量为public,初始化它在OnCreate

Info = (TextView) findViewById(R.id.BackDialogText); 

然后当谈到时间来改变文字,我得到一个NullPointerException

Info.setText(TheString); 
setContentView(R.layout.mydialog_layout); 

我已经运行没有setText的应用程序,它运行良好,显示我的预览文本我的看法。我错过了更新视图文本的一些技巧吗?

+0

Textview'Info'是否属于某个对话框?那么你将需要使用'Info =(TextView)myDialog.findViewById(R.id.BackDialogText);' –

+0

它属于mydialog_layout。 所以在这种情况下:'mydialog_layout.findViewById(R.id.BackDialogText)' – AtlasOnEarth

+1

好的。然后阅读@Vipul Shah的回答。这是正确的。它会工作。使用setContentView(R.layout.mydialog_layout); Info =(TextView)findViewById(R.id.BackDialogText); Info.setText(TheString); –

回答

1

你设置视图

setContentView(R.layout.mydialog_layout); 

你的活动,你可以不使用视图中的元素在你的代码基本上前。所以你必须在你的代码中有这样的东西

setContentView(R.layout.mydialog_layout); 
Info = (TextView) findViewById(R.id.BackDialogText); // you cannot initialize your view before setcontentview 
Info.setText(TheString); //this line must be always called after setContentView 
0

findViewById()在您从中调用它的视图中找到视图。

编辑:对不起,我的Mac崩溃了,我无法进一步扩展。基本上,在Android中,只有前景活动在任何一个点上生活。所以即使从另一个Activity修改一个View也不是一个好主意。如果它只是要修改的文本,那么您有几个选项,最简单的方法是在其中一个活动中使用公共静态变量,然后使用该变量调用setText。

因此,例如:

public class Activity1 extends Activity { 
    private static theString = ""; 

    public static void setString(String s) { 
     theString = s; 
    } 

    public void onCreate(Bundle b) { 
     super.onCreate(b); 
     setContentView(R.layout.mydialog_layout); 
    Info = (TextView) findViewById(R.id.BackDialogText); 



     Info.setText(TheString); 
    } 
} 

,然后在活性2,你可以拨打:

Activity1.setString("New String"); 
+0

所以我需要从我以后打电话的角度来找到它?例如'mydialog_layout.findViewById(R.id.BackDialogText)'? – AtlasOnEarth

1

只是互换线位置。

下面是工作片段。

setContentView(R.layout.mydialog_layout); 
Info.setText(TheString); 
+0

他说他想从另一个视图修改一个视图。 – ajacian81

+0

这仍然会在同一个setText行上导致相同的错误。 – AtlasOnEarth

+0

这是正确的,我只需要在更改视图后定义TextView。所以代码如下: 'setContentView(R.layout.mydialog_layout); Info =(TextView)findViewById(R.id.BackDialogText); Info.setText(TheString);' – AtlasOnEarth

相关问题