我在做什么 ::
UniversalDialog.java
有两个逻辑
alertDialog.setNegativeButton
& alertDialog.setPositiveButton
我想做什么 ::
我想在里面添加实现代码(内部逻辑)
alertDialog.setNegativeButton
& alertDialog.setPositiveButton
in
mainActivity中定义的接口
我怎样才能实现这个目标
MainActivity.java (我的主要活动)
public class MainActivity extends Activity implements OnClickListener{
Button btn1;
UniversalDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=(Button) findViewById(R.id.button1);
dialog = new UniversalDialog(MainActivity.this);
btn1.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
dialog.showAlert();
break;
}
}
}
UniversalDialog.java (我有一个对话框功能的课程)
public class UniversalDialog {
private final Context mContext;
private final String dialogTitle=null;
private final String dialogMessage=null;
private boolean dialogFlag=false;
public UniversalDialog(Context context) {
this.mContext = context;
}
public void showAlert(){
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
alertDialog.setTitle(dialogTitle);
alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
alertDialog.setMessage(dialogMessage);
alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Go to home screen
alertDialog.setCancelable(true);
}
});
// On pressing Settings button
alertDialog.setPositiveButton("QuitApp", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
//Go to home screen
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(startMain);
}
});
alertDialog.show();
}
}
答案 0 :(得分:3)
有几种可能性:
1)你可以传递给对象UniversalDialog MainActivity的构造函数(而不只考虑上下文),并调用后者的方法
public UniversalDialog(MainActivity activity) {
...
}
2)你可以在MainActivity上实现一个特定的接口(你指定要在MainActivity上调用的回调方法)并返回UniversalDialog这个项目
public interface ActionInterface {
public void methodOk();
public void methodKO();
}
public class MainActivity ... implements ActionInterface {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
dialog = new UniversalDialog(MainActivity.this, MainActivity.this);
...
}
public void methodOk() {
...
}
public void methodKO() {
...
}
}
public class UniversalDialog {
public UniversalDialog(Context context, ActionInterface action) {
...
}
public void showAlert(){
...
alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
action.methodKO();
...
}
});
// On pressing Settings button
alertDialog.setPositiveButton("QuitApp", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
action.methodOk();
...
}
});
alertDialog.show();
}
}
答案 1 :(得分:2)
我不确定我是否正确理解你的意图。我想您现在在UniversalDialog
课程中执行对话框操作的实现,但您希望可以在MainActivity
课程中完成。
如果我是对的,那么问题就变得简单了,并且有多种方法可以做到。我们举个例子。
在MainActivity
中定义一个内部类,让它实现DialogInterface.OnClickListener
接口,其onClick
方法应该使用which
参数。此which
参数可帮助您确定单击对话框上的哪个按钮。
如果您不喜欢内部课程,只需让MainActivity
实施DialogInterface.OnClickListener
,但我从未尝试过2 onClick
个功能(DialogInterface.OnClickListener
而另一个OnClickListener
)将发生冲突。