Android 安卓:按钮点击事件
在我的xml文件中,我有两个带有RelativeLayout的按钮。在我的类中,我扩展了Dialog&implementned OnClickListener,还添加了OnClick(View v)方法。但不知何故,当单击按钮时,onClick代码永远不会执行。有人能帮我找到代码的问题吗:Android 安卓:按钮点击事件,android,button,click,onclick,Android,Button,Click,Onclick,在我的xml文件中,我有两个带有RelativeLayout的按钮。在我的类中,我扩展了Dialog&implementned OnClickListener,还添加了OnClick(View v)方法。但不知何故,当单击按钮时,onClick代码永远不会执行。有人能帮我找到代码的问题吗: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.co
<?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" />
在xml for close btn中,我也尝试了CloseBtnClicked,但没有区别,我收到了一条意外的错误消息,应用程序关闭。不知何故,事件只是没有以任何方式被激活。此外,在将onClick添加到closebtn时,按钮现在显示在屏幕的左上角,并且丢失了它的实际位置
从活动类调用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的新手
谢谢我认为您应该比较视图id和视图id
if (v == btn_save)
到
在java类中添加此方法:
public void CloseDialog(View v)
{
}
因为在布局中,您已经设置了android:onClick=“CloseDialog”
对话框布局中的按钮的
搜索活动中的方法
类不在对话框中
在调用对话框的活动
中定义方法
或
从标记中删除android:onClick=“CloseDialog”
,并在Dialog
类中从Java代码中设置OnClickListener
。试试这个,希望能有所帮助
if(v.getId()==R.id.saveBtn_settingDlg)
SaveSettings();
else if (v.getId()==R.id.closeBtn_settingDlg)
CloseDialog();
我的问题的解决方案: 我没有使用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;
}
}
};
按钮名为MyButton,正在运行
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;
}
到
+在开始添加日志之前,千万不要说“onClick代码永远不会执行”,以确保@Sherif,Yashwant Kumar,Kiran Babu,我也在尝试调试并在onClick(视图v)添加断点,但光标并不仅仅停留在这里。我添加了日志。我在OnClick中也添加了一行,但这也不会显示在日志中。我试过Yashwant和Kiran Babu的选择,但都没有成功。我正在从我的活动调用此对话框-如果有关系的话。@Tvd将您的onClick添加到活动中,并使您的活动实现OnClickListener。最后设置ClickListener(您的活动)。汇报plz@Tvd传递一个上下文,或者我认为您可以使用getContext()让我们知道这确实很旧,但请永远不要这样做。有人会扇你耳光。。。开关不是最佳实践,将其跟踪到调试将是一场噩梦。请为屏幕上的每个按钮声明一个新的onClickListener。可以用上面提到的方法来完成,但最好为每个按钮使用单独的侦听器。可以帮助您我需要使用
View.OnClickListener
而不是OnClickListener
。
@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;
}
}
};
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;
}
}