java - newboston Android开发教程-显示列表菜单

标签 java android eclipse

我正在关注 Android 开发的 newboston 教程,我想知道是否有一个快速的解决方案来显示字符串值,而不需要它们与它们的类或 Activity 名称相同,即字符串名称“SystemActivity”必须相同为其工作的 Activity 名称。问题是它在模拟器 UI 上显示为“SystemActivity”,我宁愿给它一个更合适的名称......“启动系统”。

如果有任何帮助,我将不胜感激...

这是我的代码:

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();
    }
}

}

最佳答案

好吧,我建议您跳过本教程,因为它显示了一种不好的做法。您很少需要通过名称来查找类,但在这种情况下您不应该这样做。一个简单的拼写错误,您的应用程序就无法运行。

您应该将代码修改为基于具有名称和类型的索引或包装对象。基于索引的方法将产生比当前方法更少的错误,并且包装器对象应该 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);
}

关于java - newboston Android开发教程-显示列表菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25286390/

相关文章:

java - 该表达式不是有效的条件表达式

android - 如何在不使用Toast的情况下显示错误消息

android - 如何在独立应用程序中确定当前调用者的电话号码

java - NestedScrollView 内的 ViewPager 内的 RecyclerView - 效果不佳

java - Eclipse 不在运行时将 Groovy 脚本编译成 java 类

java - 安全地检查 EJB 是否存在或如果不存在则阻止回滚

Java 图像 IO : Can I convert a PNG-24 file to PNG-8?

java - 使用 Maven 连续触发 wsgen & wsimport,使用 wsdlLocation

eclipse - 如何在 Eclipse 中使用断点

java - Eclipse 错误地声称我有旧版本的 Android SDK