2013-10-08 164 views
1

我想问问为什么我在设置TextView的文本时出现错误。我在这里查看初学者的布局,但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 
+0

正如你所说你正试图访问TextView,这是在单独的XML资源,我不认为这是可能的。尝试在Beginner.java中创建TextView programaticaly –

+0

Beginner.java的第42行是什么? –

+0

我认为第42行是:'category.setText(“Category”);',由于类'TextView'的NPE在'beginner'布局中不存在。 –

回答

0

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

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

你有两个选择到克里特岛的看法:

  1. 创建一个使用它的构造函数和方法的观点。
  2. 使用LayoutInflater膨胀视图。见this answer。但是,如果你想这样做,你的TextView必须在新的布局(category_layout.xml),它必须是最高级别的视图(你不必把它放在其他布局)。
0

把category.setText( “类别”)startActivity()

+0

试过它甚至没有 Intent openBeginner = new Intent(“com.thesis.logipic.GAMEPLAY”); startActivity(openBeginner); 仍然得到了相同的错误 – John

0

此以前不可能访问到您未在setContentView中初始化它的其他资源。告诉我为什么你没有在同一个布局中使用它?

+0

,因为它应该只是在另一个布局中更改游戏的文本,就像这是类别,而其他布局是问题类似于 – John

0

正如你所说的它在不同的布局。为了访问它,你必须先膨胀它。

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

0

你正在做的通过一个TextView“tvCategory”,是不是在你虚高的初学者布局ID的参考。为什么在第二个活动加载后你不这样做?或者默认在XML里面?