外部类中的Android Dialog Handler

时间:2013-04-12 20:06:30

标签: android android-alertdialog

晚上好。我是Android开发的初学者。我不想弄脏我的主要活动类,为什么我想使用一些外部类(我可以为某些外部类提供“this”吗?)。我的问题可能相当简单。我想显示AlertDialog。 所以我的班级

public class Dialogs {

public static void exitActivity(Context c ){
    AlertDialog.Builder builder = new AlertDialog.Builder(c);

    //Construct dialog
    builder.setMessage("Are your sure you want to exit?");
    builder.setCancelable(false);

    //Listener for yes button
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            FifteenActivity.c.finish(); ////<<< Here is an error >>>>//
        }
    });

    //Listener for no button
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });

    AlertDialog alert = builder.create();
    alert.show();
}

}

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.newGame:
        restart();
        return true;
    case R.id.settings:

        return true;
    case R.id.info:
        return true;
    case R.id.help:
        return true;
    case R.id.exit:
        Dialogs.exitActivity(this);
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

在外部课程中创建所有菜单是一种“好习惯”吗?

2 个答案:

答案 0 :(得分:0)

在第三个类中分隔对话框代码并不是一个坏主意。特别是当您在整个应用程序中显示相同的对话框时。

传递上下文时,请确保传递活动上下文而不是应用程序上下文。

您将能够使用相同的上下文来完成您的活动。

答案 1 :(得分:0)

我理解的是,您希望通过传递上下文然后在其上调用finish来使用单独的类完成一个Activity。上述方法应该足够了。

public static void exitActivity(Context activityContext){
   ...
   (Activity)activityContext.finish();
   ...
}

是的,正如另一篇文章所述,你应该确定你传递的是正确的上下文。上下文可以相对于视图或线程等。所以请确保传入Activity上下文。