0

単純な「終了しますか?」というクラスを作っているだけです。アプリケーション内の各アクティビティのダイアログが表示されます。いくつか質問があります。OOPの初心者のImなので、怒ってはいけません。

これが私の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)関数をコメントアウトしました。誰がこれを行うことができるかについての提案はありますか?

2番目の質問は.dismiss()についてです。this.dismiss()を呼び出すと、ダイアログが消えず、画面に表示されたままになります。なぜ発生するのですか?それではどうやって却下するのですか?

3番目の質問は、この外部ダイアログクラスから親アクティビティを取得する方法です。アプリを終了できるように、.finish()を呼び出す必要があります。

任意の提案をいただければ幸いです。ありがとう。

4

5 に答える 5

2

文字列を取得するのは簡単です:

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

このクラス内ではなく、このクラスのインスタンスを作成するときのアクティビティ内でdismiss()を使用します。

ダイアログクラスを拡張することで物事を複雑にしていると思います。カスタムダイアログを作成する方法は次のとおりです http://developer.android.com/guide/topics/ui/dialogs.html

カスタムダイアログを自由に作成したい場合は、透過的なアクティビティとstartActivityForResultを使用してください。Android で透過的なアクティビティを作成するにはどうすればよいですか。

于 2012-07-10T08:29:15.567 に答える
2

最初の質問:

context.getString(R.string.exit);

3番目の質問:

((Activity) context).finish();

質問2については、あなたのifがtrueになっていないと思います。ビューをメモリアドレスで比較しません。onClickリスナーではdialogOkをnullにする必要があると思います。

于 2012-07-10T08:20:06.180 に答える
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

あなたの最初の質問のために

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

2番目の質問

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

最初の質問「文字列参照用のR.javaファイル?」

gerResource()。getString(R.string.exit);を使用できます。

2番目の質問の場合:dialog.cancel()またはdialog.dismiss();を使用します。

于 2012-07-10T08:22:39.957 に答える