0

我正在创建一个允许插件视图的家庭自动化应用程序。我已经能够在单独的项目(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)。这将是理想的,以便可以正确管理对话生命周期。

提前致谢。

4

1 回答 1

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了这个类——所以只需使用它。

于 2012-04-19T17:07:02.563 回答