我想创建一个小应用程序,显示几张图片,如果你点击它,吐司会弹出并说出名字。我无法弄清楚它为什么会立即崩溃。 LogCat说Nullpointerexpection之类的东西?!非常感谢您的帮助。
package com.example.housesgot;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.Toast;
@SuppressLint("ShowToast")
public class MainActivity extends Activity implements OnClickListener
{
ImageButton imageButton1,imageButton2,imageButton3,imageButton4,imageButton5,imageButton6;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageButton1=(ImageButton)findViewById(R.drawable.house_baratheon);
imageButton2=(ImageButton)findViewById(R.drawable.house_frey);
imageButton3=(ImageButton)findViewById(R.drawable.house_greyjoy);
imageButton4=(ImageButton)findViewById(R.drawable.house_lannister);
imageButton5=(ImageButton)findViewById(R.drawable.house_stark);
imageButton6=(ImageButton)findViewById(R.drawable.house_targaryen);
imageButton1.setOnClickListener(this);
imageButton2.setOnClickListener(this);
imageButton3.setOnClickListener(this);
imageButton4.setOnClickListener(this);
imageButton5.setOnClickListener(this);
imageButton6.setOnClickListener(this);
}
@SuppressLint("ShowToast")
@Override
public void onClick(View v)
{
if(v==imageButton1){
Toast.makeText(MainActivity.this, R.string.baratheon, Toast.LENGTH_LONG);}
if(v==imageButton2){
Toast.makeText(MainActivity.this, R.string.frey, Toast.LENGTH_LONG);}
if(v==imageButton3){
Toast.makeText(MainActivity.this, R.string.greyjoy, Toast.LENGTH_LONG);}
if(v==imageButton4){
Toast.makeText(MainActivity.this, R.string.lannister, Toast.LENGTH_LONG);}
if(v==imageButton5){
Toast.makeText(MainActivity.this, R.string.stark, Toast.LENGTH_LONG);}
if(v==imageButton6){
Toast.makeText(MainActivity.this, R.string.targaryen, Toast.LENGTH_LONG);}
}
}
答案 0 :(得分:1)
imageButton1 = (ImageButton) findViewById(R.drawable.house_baretheon);
请注意该方法是如何调用findViewById
的,因此您应该实际为其提供您在图像按钮中注册的ID
您必须先设置活动的内容视图
setContentView(R.layout.activity_main);
这将设置屏幕,并将所有这些按钮放在那里,在您进行此调用之后,您需要获取对所有图像按钮的引用。
对于所有项目, layout/activity_main.xml
应该有一个像这样的图像按钮
<ImageButton
android:id="@+id/button_house_baretheon"
android:src="@drawable/house_baretheon"
... />
然后通过调用
获取引用 imageButton1 = (ImageButton) findViewById(R.id.button_house_baretheon)
其余代码没问题。
修改强>
哦等一下,你需要在makeText()
方法调用之后调用show(),所以就像这样
Toast.makeText(MainActivity.this,R.string.baratheon,Toast.LENGTH_LONG).show();
答案 1 :(得分:0)
由于您没有发布logcat,我无法更正您的代码,但我可以举一个有效的例子:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.belfast_map);
ImageButton ib1,ib2,ib3,ib4,ib5;
//change your image ID's here
ib1= (ImageButton) findViewById(R.id.go_to_lagan_screen);
ib2= (ImageButton) findViewById(R.id.go_to_city);
ib3= (ImageButton) findViewById(R.id.go_to_university);
ib4= (ImageButton) findViewById(R.id.go_to_icon_screen);
ib5= (ImageButton) findViewById(R.id.map_to_home_screen);
ib1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//change the action here, a toast in your example
Toast.makeText(MainActivity.this, MainActivity.this.getResources().getString(R.string.my_resource_string), Toast.LENGTH_LONG);
}
} );
ib2.setOnClickListener((new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent1= new Intent (MapScreen.this, CityCentre.class);
startActivity(intent1);
//To change body of implemented methods use File | Settings | File Templates.
}
}));
ib3.setOnClickListener((new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent2= new Intent (MapScreen.this, UniversityArea.class);
startActivity(intent2);
//To change body of implemented methods use File | Settings | File Templates.
}
}));
ib4.setOnClickListener((new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent3= new Intent (MapScreen.this, TheIcons.class);
startActivity(intent3);
//To change body of implemented methods use File | Settings | File Templates.
}
}));
ib5.setOnClickListener((new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent4= new Intent (MapScreen.this, MyActivity.class);
startActivity(intent4);
//To change body of implemented methods use File | Settings | File Templates.
}
}));
}