使用R.java创建自己的对话框类,String引用问题

时间:2012-07-10 08:12:11

标签: android android-dialog android-context

我只是制作了一个应该是简单的“你想退出吗?”我的应用程序中每个活动的对话框,我有一些问题。我是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(),以便我的应用可以退出。

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

5 个答案:

答案 0 :(得分:2)

第一个问题:

context.getString(R.string.exit);

第三个问题:

((Activity) context).finish();

对于问题2,我认为你的if不是 true 。我不会比较View的内存地址。我认为在onClick监听器中,dialogOk应该是 null

答案 1 :(得分:2)

很容易得到字符串:

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

在创建此类的实例时,不要在此类中使用dismiss(),而应在活动中使用。(/ p>

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

如果您真的想自由创建自定义对话框,请使用透明活动和 startActivityForResult How do I create a transparent Activity on Android?

答案 2 :(得分:1)

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

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);
    }
}

答案 3 :(得分:1)

第一个问题

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

第二个问题

   this will not work in outer class
   use context.dialog.dismiss();

答案 4 :(得分:-1)

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

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

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