2017-03-23 8 views
-3

私は今、John HortonのPackt Publishersから「Androidゲームを構築してJavaを学ぶ」という本をJavaと学んでいます。私はOOPの本当に初心者で、1年間Cを学んだことがあります。私は本のようにすべてをやる。 setOnClickListenerを追加してアプリケーションをテストしようとすると、代わりに新しいActivityを実行している "アプリケーションが閉じられました"と表示されます。 何が間違っているかを知ってもらえますか?この本は少し外れていて(2015年1月)、初期のエラーが消えるように初期コードを修正しなければならなかった。setOnClickListenerはAndroidアプリケーションを終了します

package com.packtpub.mathgame; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.util.Log; 



public class MainActivity extends Activity implements View.OnClickListener { 

    private static final String TAG = MainActivity.class.getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (savedInstanceState != null) { 
      Log.d(TAG, "onCreate() Restoring previous state"); 
      /* restore state */ 
     } else { 
      Log.d(TAG, "onCreate() No saved state available"); 
      /* initialize app */ 
     } 

     final Button buttonPlay = (Button)findViewById(R.id.buttonPlay); 
     buttonPlay.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     Intent i; 
     i = new Intent(this, GameActivity.class); 
     startActivity(i); 
    } 

} 

===============

<Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Play" 
     android:id="@+id/buttonPlay" 
     android:layout_marginTop="28dp" 
     android:layout_below="@+id/imageView" 
     android:layout_alignRight="@+id/button2" 
     android:layout_alignEnd="@+id/button2" 
     android:layout_alignLeft="@+id/button2" 
     android:layout_alignStart="@+id/imageView" /> 
+0

投稿してください必要がありますあなたの可能であれば、Androidスタジオ –

+0

のログの下部にあるAndroidモニタータブにログとクラッシュログを表示することができます。 –

答えて

0

1)あなたは、アプリケーションタグ

これらのビューは、あなたのレイアウトは非常に奇妙に見えるだろう利用可能arn't場合だけで、ノート内のこの

<activity 
    android:name=".GameActivity" /> 

のようにAndroidManifest.xmlをあなたにGameActivityを登録する必要があります;)

android:layout_below="@+id/imageView" 
    android:layout_alignRight="@+id/button2" 
    android:layout_alignEnd="@+id/button2" 
    android:layout_alignLeft="@+id/button2" 
    android:layout_alignStart="@+id/imageView" 
+0

多くの感謝!それは今働きます!それはとても簡単でした!ありがとうございました! – Oleksa

0

はあなたAndroidManifest.xmlファイルにGameActivityを登録しましたか?

+0

いいえ、私は今それをやったし、それは動作します!ありがとうございました! – Oleksa

-1

変化これ:

この中
final Button buttonPlay = (Button)findViewById(R.id.buttonPlay); 
    buttonPlay.setOnClickListener(this); 
} 

@Override 
public void onClick(View view) { 
    Intent i; 
    i = new Intent(this, GameActivity.class); 
    startActivity(i); 
} 

final Button buttonPlay = (Button)findViewById(R.id.buttonPlay); 
buttonPlay.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Intent i; 
      i = new Intent(this, GameActivity.class); 
      startActivity(i); 
     } 
    }); 
+0

これは彼の活動にonclicklistenerビューを実装しているので全く同じです。 –

+0

そして 'MainActivity.this'を' this'だけでなくインテントに渡す必要があります。これは 'Activity'の代わりに' onClickListener'を渡すためです。 (これはボタンを押すと別のエラーが発生する) –

+1

ありがとう、よく知っておいて!私はこのように常に働いた! 1つは決して学ぶためにstoを決して:) – Apokalos

0

あなたのボタンのonClickメソッドののgetIdのみ、あなたが上をクリックしていたボタンのアイデンティティできTHNは、今あなたが1

@Override 
public void onClick(View view) { 

    switch (view.getId()) { 
     case R.id.buttonPlay: 
      //write your implementation here 
      Toast.makeText(this, "dsfdf", Toast.LENGTH_LONG).show(); 
      break; 
     case R.id.buttonPlay1: 
      Toast.makeText(this, "sdsdsdsd", Toast.LENGTH_LONG).show(); 
      break; 
    } 


} 
関連する問題