我正在关注Android开发的newboston教程,我想知道是否有一个快速的解决方案来显示字符串值,而不需要它们与它们的类或活动名称相同,即字符串名称" SystemActivity&#34 ;必须与其活动名称相同才能工作。问题是它显示为" SystemActivity"在模拟器UI上,我宁愿给它一个更合适的名字......"启动系统"。
我很感激任何帮助...
这是我的代码:
String classes [] = {"SystemActivity","DietTips","About"};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, classes));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
String link = classes [position];
try{
Class ourClass = Class.forName("com.example.system." + link);
Intent ourIntent = new Intent(Menu.this, ourClass);
startActivity(ourIntent);
}catch (ClassNotFoundException e){
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
创建一个包装类,它包含用户友好名称和“类型”(即类型名称),并使用自定义数组适配器映射它。
它比简单地创建一个现成的适配器更复杂,但是最好尽早学习如何做到这一点,因为你大部分时间都在创建包含多个字符串的自定义列表这将需要自定义适配器和自定义视图。
这看起来是一个很好的例子: http://devtut.wordpress.com/2011/06/09/custom-arrayadapter-for-a-listview-android/
如果有任何不清楚的地方,请告诉我,我会尽力提供帮助。
答案 1 :(得分:0)
好吧,我建议你跳过本教程,因为它显示了一个不好的做法。你很少需要通过它的名字找到一个类,这不是你应该这样做的情况。一个简单的错字和你的应用程序不起作用。
您应该将代码修改为基于索引或包含名称和类型的包装器对象。基于索引的方法将产生较少的错误,当前的错误和包装器对象应该100%正确地工作。
基于指数:
onListItemClick(...., int position...){
Intent i;
switch(position){
case 0:
//SystemActivity
i = new Intent(Menu.this, SystemActivity.class);
break;
//other cases
}
startActivity(i);
}
基于包装:
public class Wrapper<T> {
String name;
Class<T> type;
public Wrapper(String n, Class<T> t){
name =n;
type = t;
}
String toString(){return name};
}
//Then pass these objects to your array adapter:
Wrapper wrapper1= new Wrapper("Start System",SystemActivity.class);
...
Wrapper[] wrappers = {wrapper1,wrapper2..}
setListAdapter(new ArrayAdapter<Wrapper>(...,wrappers,..));
onListItemClick(...){
Wrapper clicked = wrappers[position];
Intent i = new Intent(Menu.this, clicked.type);
startActivity(i);
}