我刚刚开始进行Android开发,我相信你可以帮忙解决这个问题(我很抱歉我的英语不好)
我有一个主要活动,并且在某个时刻我想要调用另一个活动,希望用某些消息更改textview。在这一刻,如果我不放,我会得到一个Null指针Exception 的setContentView(R.layout.register);
但是当我把那条线放进去的时候,我正确地看到了一个毫秒的寄存器激活我的新文本“Android2”,然后再次跳转到没有文字的注册活动。我的意思是我画了两次。 我希望我已经解释得足够多了。
问题是我在哪里放置setcontentview以及什么是laylay。
非常感谢,Daniel
我给你看了一些代码:
我的主要活动有这种方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK)
{
Intent i = new Intent(this, register.class);
startActivity(i);
setContentView(R.layout.register);
TextView text = (TextView) findViewById(R.id.texto);
try {
text.setText("Android2");
}catch(Exception e) {
Log.i("Log", e.getMessage()+"Error!"); // LogCat message
}
}
//super.onActivityResult(requestCode, resultCode, data);
}
我的第二个活动类名为register:
public class register extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
}
}
寄存器接口是register.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/about_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/register" />
<TextView
android:id="@+id/texto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/continue_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/save" />
<Button
android:id="@+id/new_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/repeat" />
</LinearLayout>
</LinearLayout>
答案 0 :(得分:4)
您基本上做的是以下内容:
此时,新活动将显示在屏幕上。请注意,您的代码不正确,因为您操作当前活动中的UI元素,并且您希望更改新启动的活动。
移动此代码
TextView text = (TextView) findViewById(R.id.texto);
try {
text.setText("Android2");
}catch(Exception e) {
Log.i("Log", e.getMessage()+"Error!"); // LogCat message
}
到注册活动的onCreate()方法。
通常,当你创建一个类时,它的名字应该根据标准以大写字母开头。答案 1 :(得分:1)
您有两种不同的活动。其中一个是使用register.xml视图,第二个是尝试访问寄存器视图。该视图仅存在于您的"register"
活动中。其他活动似乎没有看法?这可能就是你获得NULL
的原因。
您应该将这两个类合并在一起,因为您似乎试图从同一视图访问texto
。
因此,总而言之,应在调用findViewById
的活动中调用setContentView
。
答案 2 :(得分:0)
删除此行,它应该可以正常工作
startActivity(i);
不确定为什么要将其称为外部活动。
否则将代码移到您的注册类
setContentView(R.layout.register);
TextView text = (TextView) findViewById(R.id.texto);
try {
text.setText("Android2");
}catch(Exception e) {
Log.i("Log", e.getMessage()+"Error!"); // LogCat message
}
}