1

ボタンを格納するダイアログレイアウトxmlファイルがあり、設定android:onClick="doSomething"しましたが、そのダイアログにクラスファイルが添付されていません。したがって、実際には、プロジェクトにある唯一のファイルは dialog_layout.xml です。それを表示して操作することはできますが、ダイアログのボタンの onClick リスナーを作成することはできません。ダイアログを起動するアクティビティをそのダイアログの所有者にして、そのアクティビティで public void doSomething(View view) を作成しようとしましたが、まだ機能していないようです。次のエラーが表示されます。

08-03 23:39:23.085: E/AndroidRuntime(6757): java.lang.IllegalStateException: Could not find a method doSomething(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'button2'

私は何が間違っているのですか?

EDITここにコードがあります:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);

    findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
        //Do something.
        } 
    });




    Preference keyP = (Preference) findPreference("keyP");
    keyP.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {



            Dialog dialog = new Dialog(SettingsActivity.this);
            dialog.setContentView(R.layout.draws_dialog);
            dialog.setTitle("Title");
            dialog.show();

            return true;
        }
    });
4

3 に答える 3

2

推奨されるようにコードからボタンを追加する必要があることを除いて、コードは見栄えがします。ダイアログ レイアウトを読み込んだ後、次のコードを追加する必要があります。xml レイアウトでボタンを削除する必要があることに注意してください。この場合、Android は現在のテーマ スタイルでボタンを作成します。

dialog.setButton(Dialog.BUTTON_POSITIVE, "Do something", 
                 new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // TODO do something here
    }
});
return dialog;

ボタンに特定のデザインや機能を持たせたい場合は、次を使用できます。

dialog.setContentView(R.layout.draws_dialog);
Button myDialogButton = (Button)dialog.findViewById(R.id.my_button);
myDialogButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    }
});

クリック リスナーは、ダイアログ生成本体から移動できます。

private DialogInterface.OnClickListener myButtonClickListener = new
    DialogInterface.OnClickListener(DialogInterface dialog, int which) {
    // TODO: do something here with click
});

そして、ダイアログ生成本体は次のようになります。

dialog.setButton(Dialog.BUTTON_POSITIVE, "Do something", myButtonClickListener);
于 2012-08-07T14:05:15.300 に答える
0

Dialogクラスには、 というメソッドがありますfindViewById(int id)。したがって、ボタンに ID を指定した場合は、このメソッドでそのインスタンスを取得する必要があります。次に、メソッドを使用して OnClickListener を Button に追加できますsetOnClickListener (View.OnClickListener l)

于 2012-08-03T21:05:33.683 に答える
0

おそらく、マニフェストで使用できるようなダイアログ テーマのアクティビティを作成できます。

<activity android:name="MyDialog" android:theme="@android:style/Theme.Dialog"></activity>

次に、そのアクティビティはダイアログとまったく同じように見えます

于 2012-08-03T21:02:11.040 に答える