我只是制作了一个应该是简单的“你想退出吗?”我的应用程序中每个活动的对话框,我有一些问题。我是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(),以便我的应用可以退出。
任何建议都将不胜感激。 感谢。
答案 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();