0
我正在創建一個允許插件視圖的家庭自動化應用程序。我已經能夠在一個單獨的項目來創建一個類爲樣本插件(APK):如何從動態加載的類調用.showDialog()
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)。這將是理想的,因此對話生命週期可以得到適當的管理。
在此先感謝。
我將'Context'傳遞給這個類。活動是一種背景,但不幸的是背景不是一種活動。 '錯誤: 方法的ShowDialog(INT)是未定義的類型上下文\t MyTestClass_IRDroidUIPlugIn.java \t/testloadclass/src目錄/ COM/strutton /安卓/ testloadclass \t線22 \t的Java Problem' – cstrutton 2012-04-19 17:29:37
@cstrutton:如果您在我的回答通知,我將構造函數和成員變量中的參數類型從上下文更改爲活動。當你將Context傳遞給構造函數時,你實際上正在傳遞活動 - 只需聲明它並使用它即可。當然,您也需要更改抽象超類。 – 2012-04-19 17:34:18
再次感謝。看起來我有與同樣的代碼綁定的另一個問題。我加載了兩次接口(一次在主代碼中,一次在插件中)。一旦我明白了這一點,其他人就開始工作了。有一件事:我編輯了上面的代碼來將活動投射到上下文。 Eclipse在抱怨。我做了這個,因爲我的測試類擴展了Button。這是可以接受的? – cstrutton 2012-04-20 00:10:30