我尝试创建一个带有按钮的菜单,这些按钮将根据相应的按钮ID(即Home1按钮,Home2按钮)启动活动类:
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.menu_home1:
launchActivity("Home1");
break;
case R.id.menu_home2:
launchActivity("Home2");
break;
}
return super.onOptionsItemSelected(item);
}
public void launchActivity(String activityName) {
Intent intent = new Intent(this, activityName + ".class");
startActivity(intent);
}
但是,我得到了#34;无法解析构造函数"当试图构建一个意图。如何编写意图构造函数来动态构造新的活动参数?
答案 0 :(得分:4)
您可以通过创建如下方法来执行您想要的操作:
private void startActivity(Class<?> cls) {
Intent i = new Intent(this, cls);
startActivity(i);
}
使用示例:
startActivity(MainActivity.class);
您正在使用要启动的实际类(Strings
),而不是使用Activities
。
在您的代码中:
switch (item.getItemId()) {
case R.id.menu_home1:
startActivity(Home1.class);
break;
case R.id.menu_home2:
startActivity(Home2.class);
break;
}
答案 1 :(得分:0)
您正在尝试做的事情,即从名称移动到类对象,称为Java反射。
大多数时候你不需要它。一种更简单的调用活动的方法就是通过 意图是一个类对象:
Intent intent = new Intent(this, Home1.class);
但是,假设您了解自己的业务,并且需要通过字符串进行调用,这是正确的方法
public void launchActivity(String fullActivityName) {
Intent intent = new Intent(this, Class.forName(fullActivityName));
startActivity(intent);
}
请注意,这仅在fullActivityName包含完整类名时才有效
例如&#34; com.bla.bla.Home1&#34;