ListView作为导航菜单

时间:2013-06-10 18:51:40

标签: android list android-activity

我正在尝试在我的应用程序中实现列表中的菜单(打开活动和对话框),就像之前执行此操作的其他应用程序一样(例如Google Play上的“类别”列表等等)。我注意到这并不像我想的那么简单。

我想到的是创建两个列表,一个用于动作名称,第二个用于图标。然后使用SimpleAdapter将它们连接到列表中的项目。在onItemClicked事件中,要做一个巨大的switch-case段,并执行每个项目需要执行的操作。

我认为这不是正确的做法。有不同的方法(并且更简单)吗?

1 个答案:

答案 0 :(得分:1)

是的,你可以:

1.使用反射来调用方法 - 并将方法设置为项目的标记。然后项目cliked从View的标签获取Method。

1.1。或者你可以使用方法的String名称,然后调用我的代码:

public static Object makeNativeApiFunctionCall(Object target, String functionName, Object... parameters) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        Object responseObject;
        Method method = target.getClass().getMethod(functionName, parameters.getClass());
        responseObject = method.invoke(target, new Object[]{parameters});
        return responseObject;
    }

2.对于这种最佳方式,使用BaseAdapter并使用自己的项目类型(如

class MyListMenuItem{
  String methodName;
  String title;
  Integer imgResource;
}

3.此外,您可以在项目的XML布局中使用SimpleAdapter和一个隐藏的textView。然后点击item从这个隐藏的textView名称中获取方法(如String)。当然你需要为此textView名称设置方法。

它会:

String[] texts = { "sometext 1", "sometext 2" };
int[] images = { R.id.img1, R.id.img2};
String methods={"Method1","Method2"};

ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(
    texts.length);
Map<String, Object> m;
for (int i = 0; i < texts.length; i++) {
  m = new HashMap<String, Object>();
  m.put(ATTRIBUTE_NAME_TEXT, texts[i]);
  m.put(ATTRIBUTE_NAME_METHOD, methods[i]);
  m.put(ATTRIBUTE_NAME_IMAGE, images[i]);
  data.add(m);
}

String[] from = { ATTRIBUTE_NAME_TEXT, ATTRIBUTE_NAME_METHOD,
    ATTRIBUTE_NAME_IMAGE };
int[] to = { R.id.tvText, R.id.hiddenTextView, R.id.ivImg };

SimpleAdapter sAdapter = new SimpleAdapter(this, data, R.layout.item,
    from, to);

lvSimple = (ListView) findViewById(R.id.lvSimple);
lvSimple.setAdapter(sAdapter);