【问题标题】:java.lang.RuntimeException: Unable to instantiate activity ComponentInfo After tapping button to hit second screen activityjava.lang.RuntimeException:无法实例化活动 ComponentInfo 点击按钮后点击第二个屏幕活动
【发布时间】:2015-07-02 01:13:39
【问题描述】:

尝试使用在点击后变为图像的 ImageButton 网格制作记忆匹配游戏,但我无法启动第二个屏幕活动。它崩溃并给了我我在下面发布的日志。我还附上了我的清单和第二个屏幕的活动。我知道当我没有全局初始化按钮并注释掉功能时,第二个屏幕活动有效。我是初学者请帮忙!

Android 清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="eagle.abhishekravi.abhishek.eagle" >

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".secondScreen"
        android:label="Operation"
        android:theme = "@style/AppTheme">

        </activity>
</application>

</manifest>

主活动

public void Secondscreen(View view) {

    Intent getNameScreenIntent;
    getNameScreenIntent = new Intent(this, secondScreen.class);
    startActivity(getNameScreenIntent);
    //finish();


}

第二屏

package eagle.abhishekravi.abhishek.eagle;




public class secondScreen extends Activity implements View.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.layout);
    Intent activityThatCalled = getIntent();
    Collections.shuffle(Arrays.asList(res));
    iconRandomizer();



};
//initialize all buttons in game
ImageButton b1 = (ImageButton) findViewById(R.id.b1);
ImageButton b2 = (ImageButton) findViewById(R.id.b2);
ImageButton b3 = (ImageButton) findViewById(R.id.b3);
ImageButton b4 = (ImageButton) findViewById(R.id.b4);
ImageButton b5 = (ImageButton) findViewById(R.id.b5);
ImageButton b6 = (ImageButton) findViewById(R.id.b6);
ImageButton b7 = (ImageButton) findViewById(R.id.b7);
ImageButton b8 = (ImageButton) findViewById(R.id.b8);
ImageButton b9 = (ImageButton) findViewById(R.id.b9);
ImageButton b10 = (ImageButton) findViewById(R.id.b10);
ImageButton b11 = (ImageButton) findViewById(R.id.b11);
ImageButton b12 = (ImageButton) findViewById(R.id.b12);
ImageButton b13 = (ImageButton) findViewById(R.id.b13);
ImageButton b14 = (ImageButton) findViewById(R.id.b14);
ImageButton b15 = (ImageButton) findViewById(R.id.b15);
ImageButton b16 = (ImageButton) findViewById(R.id.b16);
ImageButton b17 = (ImageButton) findViewById(R.id.b17);
ImageButton b18 = (ImageButton) findViewById(R.id.b18);
ImageButton b19 = (ImageButton) findViewById(R.id.b19);
ImageButton b20 = (ImageButton) findViewById(R.id.b20);


//drawables
int res[] = new int[] {R.drawable.brownbars,R.drawable.centeredorangedot,     

R.drawable.dots, R.drawable.greenlines, R.drawable.lightbulb, 

R.drawable.orangedots, R.drawable.orangelines, R.drawable.tree,
R.drawable.yellow, R.drawable.yellowwithred};   

public void iconRandomizer() {




    b1.setOnClickListener(this);
    b2.setOnClickListener(this);
    b3.setOnClickListener(this);
    b4.setOnClickListener(this);
    b5.setOnClickListener(this);
    b6.setOnClickListener(this);
    b7.setOnclickListener(this);

}





public void onClick(View v){
    switch (v.getId()){
        case R.id.b1:
            b1.setImageResource(res[0]);
            break;
        case R.id.b2:
            b2.setImageResource(res[1]);
            break;
        case R.id.b3:
            b3.setImageResource(res[2]);
            break;
        case R.id.b4:
            b4.setImageResource(res[3]);
            break;
        case R.id.b5:
            b5.setImageResource(res[4]);
            break;
        case R.id.b6:
            b6.setImageResource(res[5]);
            break;
        case R.id.b7:
            b7.setImageResource(res[6]);
            break;
        case R.id.b8:
            b8.setImageResource(res[7]);
            break;
        case R.id.b9:
            b9.setImageResource(res[8]);
            break;
        case R.id.b10:
            b10.setImageResource(res[9]);
            break;
        case R.id.b11:
            b11.setImageResource(res[0]);
            break;
        case R.id.b12:
            b12.setImageResource(res[1]);
            break;
        case R.id.b13:
            b13.setImageResource(res[2]);
            break;
        case R.id.b14:
            b14.setImageResource(res[3]);
            break;
        case R.id.b15:
            b15.setImageResource(res[4]);
            break;
        case R.id.b16:
            b16.setImageResource(res[5]);
            break;
        case R.id.b17:
            b17.setImageResource(res[6]);
            break;
        case R.id.b18:
            b18.setImageResource(res[7]);
            break;
        case R.id.b19:
            b19.setImageResource(res[8]);
            break;
        case R.id.b20:
            b20.setImageResource(res[9]);
            break;
    }


}





}

【问题讨论】:

  • 你应该在 onCreate() 中使用 findViewById 方法声明按钮必须总是在 setContentView 之后

标签: java android android-layout android-intent android-studio


【解决方案1】:

你有如下代码:

ImageButton b1 = (ImageButton) findViewById(R.id.b1);

问题是这段代码将在构造期间执行,此时活动没有布局,因此findViewById() 不起作用。您可以声明成员,但您需要在调用setContentView() 后分配它们。

ImageButton b1;

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout);
    // now assign your view references
    b1 = (ImageButton) findViewById(R.id.b1);
    ...
}

【讨论】:

  • 谢谢!!它奏效了,我不知道以前会是这样。
猜你喜欢
  • 2011-06-08
  • 2016-11-17
  • 2015-03-04
  • 2013-04-12
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多