2

我刚刚开始 Android 开发,我相信你可以帮助解决这个问题(我很抱歉我的英语不好)

我有一个主要活动,并且在某个时刻我想调用另一个活动,其中想要更改带有一些消息的文本视图。此时如果我不放 setContentView(R.layout.register); ,我会得到一个空指针异常;

但是,当我输入该行时,我正确地看到了带有我的新文本“Android2”的注册活动一毫秒,然后再次跳转到没有文本的注册活动。我的意思是我画了两次。我希望我已经解释得够多了。

问题是我必须在哪里放置 setcontentview 以及使用什么布局。

非常感谢,丹尼尔

我给你看一些代码:

我的主要活动有这种方法:

  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);
    }

我的第二个活动课程叫做注册:

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>
4

3 回答 3

4

你基本上做的是以下几点:

  1. 您准备开始另一项活动的意图
  2. 您开始准备意图的活动
  3. 您将当前活动的内容设置为 R.layout.register
  4. 你得到了 textView (在当前活动上)
  5. 您将 textView 的文本设置为 Android2

并且,此时新的活动出现在屏幕上。请注意,您的代码不正确,因为您在当前活动中操作 UI 元素,并且您希望新启动的活动发生变化。

移动此代码

TextView text = (TextView) findViewById(R.id.texto);

try {
    text.setText("Android2");
}catch(Exception e) {
    Log.i("Log", e.getMessage()+"Error!"); // LogCat message
}

到注册活动的 onCreate() 方法。

顺便说一句,通常,当您创建一个类时,根据标准,它的名称应该以大写字母开头。

于 2012-04-22T09:27:06.807 回答
1

你有两个不同的活动。其中之一是使用 register.xml 视图,第二个是尝试访问 register 视图。该视图仅存在于您的"register"活动中。其他activity好像没有view?这可能就是你得到NULL.

您应该将这两个类合并在一起,因为看起来您正试图texto从同一个视图访问。

因此,总而言之,findViewById应该从调用setContentView.

于 2012-04-22T08:35:56.593 回答
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
            }
    }
于 2012-04-22T08:38:57.967 回答