我是Android的初学者。我试图通过onclick事件中的意图开始一个新的活动。这在模拟器中工作正常。但是当我在真实设备中尝试它时,它不起作用,应用程序再次进入主屏幕。 logcat中没有显示错误。
这是我调用startActivity
方法的地方。
relativeAbout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
try {
Class OurClass = Class
.forName("com.wad.tourismguide.AboutCity");
Intent newIntent = new Intent(getApplicationContext(),
OurClass);
newIntent.putExtra("name", name);
newIntent.putExtra("detail", detail);
newIntent.putExtra("image", main);
startActivity(newIntent);
System.out.println("intent starting");
} catch (ClassNotFoundException e) {
// TODO: handle exception
e.printStackTrace();
}
}
});
新活动如下所示。
public class AboutCity extends Activity {
TextView cityName;
ImageView image;
TextView detailText;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.aboutcity);
cityName = (TextView)findViewById(R.id.tvDetailCityName);
image = (ImageView)findViewById(R.id.ivDetailImage);
detailText = (TextView)findViewById(R.id.tvDetailText);
String name = getIntent().getStringExtra("name");
System.out.println("city name"+ name);
String detail = getIntent().getStringExtra("detail");
System.out.println("city detail"+ detail);
Bitmap b= (Bitmap)getIntent().getParcelableExtra("image");
System.out.println(detail);
cityName.setText(name);
detailText.setText(detail);
image.setImageBitmap(b);
}
}
正如我之前解释的那样,这在模拟器中运行良好。但它在真实设备中不起作用。我无法找到我错的地方。有人可以帮帮我吗?
答案 0 :(得分:2)
除非有特定原因要使用Class OurClass = Class.forName("com.wad.tourismguide.AboutCity");
设置目标Class
,否则通过Intent(使用Extras
)调用其他活动的传统方式将按宣传方式工作。< / p>
Intent newIntent = new Intent(getApplicationContext(), AboutCity.class);
newIntent.putExtra("name", name);
newIntent.putExtra("detail", detail);
newIntent.putExtra("image", main);
startActivity(newIntent);
您还可以尝试另一种基本上可用作上述代码的变体:
Intent newIntent = new Intent();
newIntent.setClass(getApplicationContext(), AboutCity.class);
newIntent.putExtra("name", name);
newIntent.putExtra("detail", detail);
newIntent.putExtra("image", main);
startActivity(newIntent);
编辑:在阅读完本文之后:http://www.xyzws.com/Javafaq/what-does-classforname-method-do/17,我倾向于认为根本不需要Class OurClass = Class.forName("com.wad.tourismguide.AboutCity");
。如果我错了,有人可以纠正我。
答案 1 :(得分:2)
我不认为你的代码是错的,但你可以在调用新的Intent时简单:
Intent newIntent = new Intent(CurrentActivity.this, AboutCity.class);
newIntent.putExtra("name", name);
newIntent.putExtra("detail", detail);
newIntent.putExtra("image", main);
startActivity(newIntent);
毕竟你的代码会更清晰,你不需要看到异常(错误几率更低)。
答案 2 :(得分:0)
只需将您想要启动的当前活动类和活动类传递给构造函数:
Intent intent = new Intent(CurrentActivity.this, AboutCity.class);
// put extra
startActivity(intent);