【问题标题】:Error in Change Textview?更改文本视图出错?
【发布时间】:2013-10-09 18:00:20
【问题描述】:

我想问一下为什么我在设置TextView 的文本时会出错。我在这里查看的是初学者布局,但 textview 在我的游戏布局中。那可能吗?这是我的代码:

public class Beginner extends Activity 
{

    Button beginner1, beginner2;
    TextView category;

    @Override
    protected void onCreate(Bundle MainPage) 
    {
        super.onCreate(MainPage);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.beginner);

        beginner1 = (Button) findViewById(R.id.btnBeginner1);
        beginner2 = (Button) findViewById(R.id.btnBeginner2);

        beginner1.setOnClickListener(myOnlyhandler);
        beginner2.setOnClickListener(myOnlyhandler);

        category = (TextView) findViewById(R.id.tvCategory);

    }

    View.OnClickListener myOnlyhandler = new View.OnClickListener(){

    @Override
    public void onClick(View v) 
    {
        // TODO Auto-generated method stub
        switch(v.getId()) {
        case R.id.btnBeginner1:
            Intent openBeginner = new Intent("com.thesis.logipic.GAMEPLAY");
            startActivity(openBeginner);
            category.setText("Category");
        break;
        case R.id.btnBeginner2:
            Intent openBeginner2 = new Intent("com.thesis.logipic.GAMEPLAY");
            startActivity(openBeginner2);  
            category.setText("Category");
        break;
        }
    }
    };

}

这是来自我的 Logcat 的错误:

10-08 21:26:30.486: D/AndroidRuntime(1019): Shutting down VM
10-08 21:26:30.486: W/dalvikvm(1019): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
10-08 21:26:30.506: E/AndroidRuntime(1019): FATAL EXCEPTION: main
10-08 21:26:30.506: E/AndroidRuntime(1019): java.lang.NullPointerException
10-08 21:26:30.506: E/AndroidRuntime(1019):     at com.thesis.logipic.Beginner$1.onClick(Beginner.java:42)
10-08 21:26:30.506: E/AndroidRuntime(1019):     at android.view.View.performClick(View.java:2408)
10-08 21:26:30.506: E/AndroidRuntime(1019):     at android.view.View$PerformClick.run(View.java:8816)
10-08 21:26:30.506: E/AndroidRuntime(1019):     at android.os.Handler.handleCallback(Handler.java:587)
10-08 21:26:30.506: E/AndroidRuntime(1019):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-08 21:26:30.506: E/AndroidRuntime(1019):     at android.os.Looper.loop(Looper.java:123)
10-08 21:26:30.506: E/AndroidRuntime(1019):     at android.app.ActivityThread.main(ActivityThread.java:4627)
10-08 21:26:30.506: E/AndroidRuntime(1019):     at java.lang.reflect.Method.invokeNative(Native Method)
10-08 21:26:30.506: E/AndroidRuntime(1019):     at java.lang.reflect.Method.invoke(Method.java:521)
10-08 21:26:30.506: E/AndroidRuntime(1019):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-08 21:26:30.506: E/AndroidRuntime(1019):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-08 21:26:30.506: E/AndroidRuntime(1019):     at dalvik.system.NativeStart.main(Native Method)
10-08 21:26:32.466: I/Process(1019): Sending signal. PID: 1019 SIG: 9

【问题讨论】:

  • 正如您所说,您正在尝试访问位于单独的 xml 资源中的 TextView,我认为这是不可能的。尝试在 Beginner.java 中以编程方式创建 TextView
  • Beginner.java 的第 42 行是什么?
  • 我认为第 42 行是:category.setText("Category");,由于 TextView 类别的 NPE 在 beginner 布局中不存在。
  • 我认为R.id.tvCategory不在同一个布局xml中,这是NPE的原因。

标签: android nullpointerexception textview


【解决方案1】:

您的 TextView 必须位于您使用 setContentView()onCreate() 中设置的布局中。你得到 NullPointerException 因为你试图找到不属于你布局的视图。

如果您想在布局中添加视图,可以通过编程方式进行。您必须以编程方式创建视图,然后使用 yourLayout.addView(textView, params) 将其添加到您的布局中。

克里特视图有两种选择:

  1. 使用其构造函数和方法创建视图。
  2. 使用LayoutInflater 扩展视图。见this answer。但是,如果您想这样做,您的 TextView 必须在新布局中 (category_layout.xml) 并且必须是顶级视图(您不必将其放置在其他布局中)。

【讨论】:

    【解决方案2】:

    将 category.setText("Category") 放在 startActivity() 之前

    【讨论】:

    • 即使没有 Intent 也试过了 openBeginner = new Intent("com.thesis.logipic.GAMEPLAY");开始活动(openBeginner);仍然有同样的错误
    【解决方案3】:

    这无法访问您未在 setContentView 中初始化的其他资源。告诉我你为什么不在同一个 Layout 中使用它?

    【讨论】:

    • 因为它应该只是在另一个布局中更改游戏的文本,就像这个是类别,另一个布局是问题所在
    【解决方案4】:

    正如你所说,它的布局不同。为了访问它,你必须先给它充气。

    或者您可以将您的 TextView 移动到 R.layout.beginner 布局中。

    【讨论】:

      【解决方案5】:

      您正在通过不在您被夸大的 beginner 布局中的 TextView "tvCategory" 的 ID 进行引用。为什么加载第二个活动后不这样做?还是默认在 XML 中?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 2013-06-06
        • 1970-01-01
        • 2016-05-04
        • 1970-01-01
        • 2015-10-23
        • 1970-01-01
        相关资源
        最近更新 更多