我正在创建一个允许插件视图的家庭自动化应用程序。我已经能够在一个单独的项目(apk)中创建一个类作为示例插件:
public class MyTestClass_IRDroidUIPlugIn extends Button implements IRDroidInterface{
Context mContext;
public MyTestClass_IRDroidUIPlugIn(Context context) {
super(context);
mContext = context;
setText("I was loaded dynamically! (1)");
setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// how do I show the dialog from here?
Activity.showDialog(1);
}}
);
}
public Dialog buildConfigDialog(int ID){
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setMessage("Click the Button...(1)")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
return builder.create();
}
}
我可以在运行时加载这个类并创建它的实例:
try {
final File filesDir = this.getFilesDir();
final File tmpDir = getDir("dex", 0);
final DexClassLoader classloader = new DexClassLoader( filesDir.getAbsolutePath()+"/testloadclass.apk",
tmpDir.getAbsolutePath(),
null, this.getClass().getClassLoader());
final Class<View> classToLoad =
(Class<View>) classloader.loadClass("com.strutton.android.testloadclass.MyTestClass_IRDroidUIPlugIn");
mybutton = (View) classToLoad.getDeclaredConstructor(Context.class).newInstance(this);
mybutton.setId(2);
main.addView((View)mybutton);
} catch (Exception e) {
e.printStackTrace();
}
setContentView(main);
}
protected Dialog onCreateDialog(int id) {
switch (id) {
case 1:
return ((IRDroidInterface) mybutton).buildConfigDialog(id);
}
return null;
}
我希望插件能够显示配置对话框。有没有办法可以将Activity对象传递给这个类,以便它可以使用.showDialog(ID)。这将是理想的,以便可以正确管理对话生命周期。
提前致谢。
答案 0 :(得分:2)
也许我错过了什么,但为什么你不能做这样的事情?
public class MyTestClass_IRDroidUIPlugIn extends Button implements IRDroidInterface{
Activity mContext;
public MyTestClass_IRDroidUIPlugIn(Activity context) {
super(context);
mContext = context;
...
setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mContext.showDialog(1);
}}
);
.....
}
当你创建这个类时,你已经将Activity
传递给了这个类 - 所以只需使用它。