0

我只是做了一个应该是简单的“你想退出吗?”的课程。我的应用程序中的每个活动的对话框,我有一些问题。我是 OOP 的初学者,所以不要生气。

所以这是我的 ExitDialog 类:

public class ExitDialog extends Dialog implements OnClickListener
{

private Button dialogOk;
private Button dialogCancel;
private TextView dialogText;

public ExitDialog(Context context)
{
    super(context);

    final Dialog dialog = new Dialog(context, R.style.DialogAnim);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.exitdialog);

    dialogOk = (Button)dialog.findViewById(R.id.dialogOk);
    dialogCancel = (Button)dialog.findViewById(R.id.dialogCancel);
    dialogText = (TextView)dialog.findViewById(R.id.dialogText);


    //How to reach any reference from R.java ?
    //                    
    //dialogOk.setText(getString(R.string.Yes));
    //ialogText.setText(getString(R.string.Exit));


    dialogOk.setOnClickListener(this);
    dialogCancel.setOnClickListener(this);

    dialog.show();
}

@Override
public void onClick(View v)
{


//Many people said on answers, that i must use **getId()** to compare
//these two views, but i can do just like this, bacause i got the message in logcat!
//but the dismiss() just not get called...
    if(v == dialogOk)
    {
        Log.i("ExitDialog", "dialogOk clicked");
        this.dismiss();

    }

}


}

我有3个问题要问你:

如何访问我的应用程序的R.java 文件以获取字符串引用?如您所见,我注释掉了getString(R.string.Yes)getString(R.string.Exit)函数,因为我不能在这个外部类中使用它。关于我可以执行此操作的任何建议?

第二个问题是关于.dismiss()的。如果我调用this.dismiss(),我的对话框不会消失,它会停留在屏幕上,为什么会发生?那怎么辞退呢?

第三个问题是:如何从这个外部对话框类中获取父活动?我需要它来调用.finish(),所以我的应用程序可以退出。

任何建议将不胜感激。谢谢。

4

5 回答 5

2

第一个问题:

context.getString(R.string.exit);

第三个问题:

((Activity) context).finish();

对于问题 2,我认为您的 if 不会导致true。我不会通过它的内存地址来比较视图。我认为在 onClick 监听器中dialogOk 应该为空。

于 2012-07-10T08:20:06.180 回答
2

很容易得到字符串:

String a = context.getResources().getString(R.string.myString);

当您创建此类的实例时,您不会在此类中使用dismiss(),而是在您的活动中使用。

我认为您通过扩展对话框类使事情复杂化。以下是如何创建自定义对话框 http://developer.android.com/guide/topics/ui/dialogs.html

如果您真的想自由创建自定义对话框,请使用透明 Activity 和startActivityForResult 如何在 Android 上创建透明 Activity?

于 2012-07-10T08:29:15.567 回答
1

对于你的第一个问题

   static Context context = getApplicationContext();
   context.getString(R.string.app_name);

第二个问题

   this will not work in outer class
   use context.dialog.dismiss();
于 2012-07-10T08:33:06.123 回答
1

不要通过对话框扩展您的活动,通过活动扩展它。像您调用正常活动一样调用您的对话框活动。但是在清单文件中,在您的对话框活动下添加以下行:

android:theme="@android:style/Theme.Dialog"

和上面的 setcontentView 活动:

requestWindowFeature(Window.FEATURE_NO_TITLE);

您将能够像其他活动一样正常调用 Resource 和 dismiss() 函数。

button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent intent=new Intent(YourActivityName.this,DialogClass.class);
                startActivity(intent);

            }
        });

对话活动:

public class DialogClass extends Activity{
    Button button;
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.custom);

        button=(Button) findViewById(R.id.cancel);//belongs to xml file
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                finish();
            }
        });

        textView=(TextView) findViewById(R.id.ttt);////belongs to xml file
        textView.setText(R.string.app_name);
    }
}
于 2012-07-10T08:30:47.110 回答
-1

对于您的第一个问题“用于字符串引用的 R.java 文件?”

你可以使用 gerResource().getString(R.string.exit);

对于你的第二个问题:使用 dialog.cancel() 或 dialog.dismiss();

于 2012-07-10T08:22:39.957 回答