2016-05-16 16 views
0

ありがとう、私は管理しました!Androidの問題onClick()

私はコーディングが新しく、なぜ自分のコードが動作しないのか理解できません。 私はすべての3つのボタンを1つのメソッドonClick()で結合したいとアンドロイドスタジオはすべてがエラーなしで書かれていることを私に示していますが、アプリケーションを実行すると即座に閉じます。

package com.example.trafficlight; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.RelativeLayout; 

public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 
final Button LightSide = (Button) findViewById(R.id.LightSide); 
final Button DarkSide = (Button) findViewById(R.id.DarkSide); 
final Button Chubaka = (Button) findViewById(R.id.Chubaka); 
private RelativeLayout mRelativeLayout; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mRelativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout); 
    LightSide.setOnClickListener(this); 
    DarkSide.setOnClickListener(this); 
    Chubaka.setOnClickListener(this); 


} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.LightSide: 
      LightSide.setText("LightSide"); 
      mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 
     case R.id.DarkSide: 
      DarkSide.setText("DarkSide"); 
      mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorRed)); 
     case R.id.Chubaka: 
      Chubaka.setText("Chubakka"); 
      mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorBrown)); 

    } 

} 
} 

これはバグコード 05-16 12である:43:06.874 8223から8223/com.example.trafficlight E/AndroidRuntime:致命的な例外:メイン プロセス:com.example.trafficlight、PID:8223 java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'void android.widget.Button.setText(java.lang.CharSequence)'を呼び出そうとしました at com.example.trafficlight.MainActivity.onClick(MainActivity.java:36) ) android.view.View.performClick(View.java:4780) android.view.View $ PerformClick.run(View.java:19866)android.os.Looper.loop(Looper.java:135) でandroid.os.Handler.dispatchMessage(Handler.java:95) でandroid.os.Handler.handleCallback(Handler.java:739) ででandroid.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:372) at comあなたが移動する必要がありますcom.android.internal.os.ZygoteInit.mainで.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) (ZygoteInit.java:698)

+0

OK、 'setContentView'を呼び出した後、すべてのボタンのonCreateメソッドを初期化します。 –

答えて

2

onCreateメソッドにあなたfindViewById通話:

Button LightSide; 
Button DarkSide; 
Button Chubaka; 
private RelativeLayout mRelativeLayout; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mRelativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout); 
    LightSide = (Button) findViewById(R.id.LightSide); 
    DarkSide = (Button) findViewById(R.id.DarkSide); 
    Chubaka = (Button) findViewById(R.id.Chubaka); 
    LightSide.setOnClickListener(this); 
    DarkSide.setOnClickListener(this); 
    Chubaka.setOnClickListener(this); 


} 
+0

この回答を確認してください –

+0

これはアプリが開きますが、ボタンの1つを再びクリックしようとするとクラッシュします)停止した ' –

+0

これはバッグコードです –

0

この

IntialiseのOnCreateメソッド内のすべてのボタンを試してみてください。各場合

case R.id.LightSide: 
      LightSide.setText("LightSide"); 
      mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 
break; 
     case R.id.DarkSide: 
      DarkSide.setText("DarkSide"); 
      mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorRed)); 
break; 
     case R.id.Chubaka: 
      Chubaka.setText("Chubakka"); 
      mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorBrown)); 
break; 
0

この質問後
break;挿入機構のビット複雑です。ボタンのクリックイベントの1つが設定されているxmlファイルのclickイベントをリンクしていると思います(onClick = "onClick")。これはonclickの引数がViewであるためです。この場合、メソッドはボタンでのみ動作します他のボタン用にリンクされています。

短い答えは、すべてのボタンウィジェットに一意のIDを与え、OnClickListnerを実装することです。