我想在不同的活动中显示相同的对话框。我试图制作BaseActivitiy
。活动扩展了我的BaseActivity。到目前为止工作,但现在我想更新对话框关闭时显示对话框的活动。在我的情况下,更新意味着使用来自SQLite数据库的数据填充列表视图。
我还尝试检索类名以使用这些活动的更新方法。但由于非静态SQL方法,无法将更新方法更改为静态...
你有什么想法吗?
的活动:
public class MyActivity extends Dialogs {
...
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
int idx = info.position;
switch (item.getItemId()) {
case CONTEXTMENU_ID:
showMyDialog(this,DIALOG_ID);
break;
}
return true;
}
public void update() {
...
}
}
DialogsClass
public class Dialogs extends Activity {
@Override
protected Dialog onCreateDialog(int id) {
...
}
...
//Called on Dialog-Butten press
private void ReloadActivity(){
if(DialogCalledByClass.contains("MyActivity")) {
MyActivity.update();// It doesn't worke because non-static....
}
else if(DialogCalledByClass.contains("MyActivity2")) {
}
}
public void showMyDialog(Context ctx,int id) {
showDialog(id);
DialogCalledByClass =ctx.getClass().toString();
}
}
这就是我尝试过的......
答案 0 :(得分:1)
例如......您可以创建自己的对话框,而不是创建BaseActivity:
class myDialog extends AlertDialog {
Activity myActivity;
public myDialog(Activity myAct){
myActivity=myAct;
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_dialog);
...
...
}
@Override
public void dismiss(){
myActivity.update();
}
@Override
public void cancel(){
myActivity.update();
}
}
我不知道我是否理解了你的问题,但这是一个想法。我希望它可以帮到你。
答案 1 :(得分:1)
我找到了解决方案。谢谢大卫! Sry我不能投票,因为声誉较低......
private void ReloadActivity(){
if(DialogCalledByClass.contains("MyActivity")){
try {
Method m = DialogActivity.getClass().getMethod("Update");
try {
m.invoke(DialogActivity);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (SecurityException e) {
error.d(TAG, "SecurityException"+ e);
e.printStackTrace();
} catch (NoSuchMethodException e) {
Log.d(TAG, "NoSuchMethodException"+ e);
}
}
else if(DialogCalledByClass.contains("MyActivity2")){
}
}
public void showMyDialog(Activity act,int id){
showDialog(id);
DialogCalledByClass = act.getClass().toString();
DialogActivity = act;
}