我在库中定义了一个菜单结构,它使用了preferenceActivity等。 我想要的是在库中定义一个菜单,在最终的应用程序中我只想创建一个xml文件,说明我有什么菜单项以及当有人点击该项时该怎么做。
我知道我可以定义一个意图并通过菜单启动它,但这看起来非常笨重而且不是我想要的。我想在最终应用程序中的某个地方定义一个runnable并通过xml引用它,库菜单应该能够读取xml并运行runnable。
有可能吗?
编辑: 这就是我需要的: 有一个菜单,其中包含在库中定义的所有内容。实现时,它应该执行在目标应用程序中的.xml文件中定义的内容。我可以轻松设置首选项并激发意图。但是如何以这种方式执行runnable?如果我设置一个侦听意图的broadcastlistener,它不是很平滑。 工作atm(旧库)的唯一方法是库内的菜单需要知道可以通过菜单执行的每个代码。那太过分了。
答案 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构建的(在这种情况下是要求)