0

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

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

我认为这不是正确的做法。有不同的方法(而且更简单)可以做到这一点?

4

1 回答 1

1

是的你可以:

1.使用反射调用方法 - 并将方法设置为项目的标签。然后项目单击从 View 的标签中获取方法。

1.1.或者你可以使用方法的字符串名称,然后调用我的代码:

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。然后从这个隐藏的 textView 方法名称(作为字符串)中单击项目。当然,在您需要为此 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);
于 2013-06-10T19:06:55.450 回答