web-dev-qa-db-ja.com

Android:ボタンクリックイベント

RelativeLayoutを使用して、xmlファイルに2つのボタンがあります。私のクラスでは、Dialogを拡張し、OnClickListenerを実装し、OnClick(View v)メソッドも追加しました。しかし、どういうわけか、ボタンがクリックされたときにonClickコードが実行されることはありません。誰でも私のコードの問題を見つけるのを手伝うことができます:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:layout_width="fill_parent"
Android:layout_height="wrap_content" Android:orientation="vertical"  
Android:padding="10px">

    ......
    <Button Android:id="@+id/saveBtn_settingDlg" Android:layout_width="wrap_content" 
    Android:layout_height="wrap_content" Android:layout_below="@+id/editText1"
    Android:layout_marginLeft="10px" Android:text="Save" />

    <Button Android:id="@+id/closeBtn_settingDlg" Android:layout_width="wrap_content" Android:layout_height="wrap_content" 
      Android:text="Close" Android:layout_alignBaseline="@+id/saveBtn_setting" 
      Android:layout_toRightOf="@+id/saveBtn_setting" Android:onClick="CloseDialog"  />

クラス

 public class SettingDialog extends Dialog implements OnClickListener {

private Button btn_save, btn_close;

           // In Constructor
    btn_save = (Button) findViewById(R.id.saveBtn_settingDlg);
    btn_close = (Button) findViewById(R.id.closeBtn_settingDlg);
    btn_save.setOnClickListener(this);
    btn_close.setOnClickListener(this);

@Override
public void onClick(View v) {
    if (v == btn_save) 
        SaveSettings();
    else if (v == btn_close)
        CloseDialog();

    return;
}

private void CloseDialog() {
    disposeAll();
    this.dismiss();
}

public void CloseBtnClicked(View v) {
    CloseDialog();
}

Close btnのxmlでCloseBtnClickedも試しましたが、違いはなく、UnexpectedErrorメッセージが表示され、アプリケーションがシャットダウンしました。どういうわけか、イベントはどのような方法でもアクティブ化されません。また、closeClickにonClickを追加すると、ボタンが画面の左上に表示され、実際の場所が失われます。

ActivityクラスからSettingDialogを呼び出す:

    private void OpenSettingDialog() {

    AlertDialog.Builder ad = new AlertDialog.Builder(this);
    ad.setIcon(R.drawable.ic_dialog_small);

    View inflatedView = LayoutInflater.from(this).inflate(R.layout.settings_dialog, null); 
    ad.setView(inflatedView);

    AlertDialog adlg = ad.create();     
    adlg.show();

}

誰でも私がこの問題の理由とそれを解決する方法を知るのを手伝うことができます。私はAndroidの初心者です。

ありがとう

13
Tvd

私の問題の解決策:

AlertBuilderとAlertDialogを使用する代わりに、ダイアログを次のように呼び出しました。

    SettingDialog sd = new SettingDialog(this, mySettings);
sd.show();

そして、これはうまくいきました。すべてのクリックイベントは、SettingDialog内でのみ処理されました。 SettingDialogに変更は加えられませんでした。 SettingDialogを呼び出す方法のみがアクティビティで変更されます。それでおしまい。

ところで、onClick()では、ビューとその名前を組み合わせています:

    public void onClick(View v) {
    Log.i("APP: ", "Into OnClick of SettingDialog. View = " + v);
    if (v == btn_save) 
        SaveSettings();
    else if (v == btn_close) 
        CloseDialog();

    return;
}

また、完全に動作します。私はこの方法のみを使用し、うまく機能します。 IDのみで確認する必要はありません。

私の解決策が私のように立ち往生している他の人を助けることを願っています。あなたの努力と助けに感謝します。

1
Tvd

以下のように、私が常に行う最も簡単な方法を使用するようにすべきです。

@Override
public void onCreate(Bundle savedInstanceState) {
    button1.setOnClickListener(onClickListener);
    button2.setOnClickListener(onClickListener);
    button3.setOnClickListener(onClickListener);
}

private OnClickListener onClickListener = new OnClickListener() {
    @Override
    public void onClick(final View v) {
        switch(v.getId()){
            case R.id.button1:
                 //DO something
            break;
            case R.id.button2:
                 //DO something
            break;
            case R.id.button3:
                 //DO something
            break;
        }
    }
};
20

ビューではなくビューIDを比較する必要があると思います

if (v == btn_save)

   if (v.getId() == btn_save.getId())
8
Yashwanth Kumar
Android:onClick="CloseDialog"

ButtonのレイアウトのDialogActivityにないDialogクラスのメソッドを検索します

Activityを呼び出しているDialogでメソッドを定義するか、Android:onClick="CloseDialog"タグからand OnClickListener from Java Dialogクラスのコード。

4
Adil Soomro

ボタン名はMyButton.itの機能です。

   MyButton.setOnClickListener(new OnClickListener() 
{
 @Override          
 public void onClick(View v) 
 {              
     mytextView.setText("Messi");           
  }         
});
3
Erhan Demirci

このコードからコードを置き換えるだけです

@Override
public void onClick(View v) {

    if (v == btn_save) 
        SaveSettings();
    else if (v == btn_close)
        CloseDialog();

    return;
}

@Override
public void onClick(View v) {

    switch(v.getId()){
            case R.id.saveBtn_settingDlg:
                SaveSettings();

            break;
            case R.id.closeBtn_settingDlg:
                CloseDialog();
            break;
        }
}
0
Ravi Makvana

このメソッドをJava classに追加:

public void CloseDialog(View v)
{

}

レイアウトでAndroid:onClick = "CloseDialog"を設定しているため

これを試して、私はそれが助けになることを願っています

 if(v.getId()==R.id.saveBtn_settingDlg)
       SaveSettings();

        else if (v.getId()==R.id.closeBtn_settingDlg)

            CloseDialog();
0
Kiran Babu