Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:按钮点击事件_Android_Button_Click_Onclick - Fatal编程技术网

Android 安卓:按钮点击事件

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文件中,我有两个带有RelativeLayout的按钮。在我的类中,我扩展了Dialog&implementned 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"  />
在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;
        }
}