如何执行必须在xml文件中定义的runnable

时间:2014-05-07 16:18:14

标签: android

我在库中定义了一个菜单结构,它使用了preferenceActivity等。 我想要的是在库中定义一个菜单,在最终的应用程序中我只想创建一个xml文件,说明我有什么菜单项以及当有人点击该项时该怎么做。

我知道我可以定义一个意图并通过菜单启动它,但这看起来非常笨重而且不是我想要的。我想在最终应用程序中的某个地方定义一个runnable并通过xml引用它,库菜单应该能够读取xml并运行runnable。

有可能吗?

编辑: 这就是我需要的: 有一个菜单,其中包含在库中定义的所有内容。实现时,它应该执行在目标应用程序中的.xml文件中定义的内容。我可以轻松设置首选项并激发意图。但是如何以这种方式执行runnable?如果我设置一个侦听意图的broadcastlistener,它不是很平滑。 工作atm(旧库)的唯一方法是库内的菜单需要知道可以通过菜单执行的每个代码。那太过分了。

1 个答案:

答案 0 :(得分:0)

我是这样做的。

在我的attrs.xml(库内)我定义了以下属性

<attr name="runnable" format="string" />

然后我在每个应用中定义一个特定菜单,其中包含

等条目
<com.company.library.menu.CustomPref
    android:title="@string/mytitle"
    android:icon ="@drawable/icon"
    custom:runnable="com.company.someapp.somefolder.MyRunnable" />

在我的class CustomPref extends Preference

@Override
protected void onClick() {
    try {
        Class<?> clazz = Class.forName(runnable_string_from_xml);

        // check if it's a Runnable

        Object o = clazz.newInstance();

        if(o instanceof Runnable) {
            Runnable r = (Runnable) o;
            myPrefActivity.runOnUiThread(r);
        }
    } catch () //...

现在我可以定义在我的最终应用程序中实现Runnable的文件/类,并创建将执行这些runnables的菜单,即使菜单是在库中创建的,也不知道运行时会有哪些类。< / p>

所有菜单都是从xml构建的(在这种情况下是要求)