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の初心者です。
ありがとう
私の問題の解決策:
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のみで確認する必要はありません。
私の解決策が私のように立ち往生している他の人を助けることを願っています。あなたの努力と助けに感謝します。
以下のように、私が常に行う最も簡単な方法を使用するようにすべきです。
@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;
}
}
};
ビューではなくビューIDを比較する必要があると思います
if (v == btn_save)
に
if (v.getId() == btn_save.getId())
Android:onClick="CloseDialog"
Button
のレイアウトのDialog
のActivity
にないDialog
クラスのメソッドを検索します
Activity
を呼び出しているDialog
でメソッドを定義するか、Android:onClick="CloseDialog"
タグからand OnClickListener
from Java Dialog
クラスのコード。
ボタン名はMyButton.itの機能です。
MyButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
mytextView.setText("Messi");
}
});
このコードからコードを置き換えるだけです
@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;
}
}
このメソッドを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();