Tvd
Tvd

Reputation: 4601

Android: Button click event

I have 2 buttons in my xml file with RelativeLayout. In my class I have extended Dialog & implemetned OnClickListener and also added OnClick(View v) method. But somehow the onClick code is never executed when the button is clicked. Can anyone help me find the problem with my code :

<?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"  />

Class

 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();
}

In xml for close btn I tried CloseBtnClicked also but no difference and I get an UnexpectedError message and application shuts down. Somehow the event is only not activated in any ways. And also on adding onClick to closebtn the button is now shown on the top-left of the screen and lost the actual location of it.

Calling SettingDialog from Activity class :

    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();

}

Can anyone help me know the reason for this problem and how do I solve it. I am a newbie to Android.

Thanks

Upvotes: 13

Views: 100879

Answers (8)

Ravi Makvana
Ravi Makvana

Reputation: 2912

just Replace Your code From this code

@Override
public void onClick(View v) {

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

    return;
}

to

@Override
public void onClick(View v) {

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

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

Upvotes: 1

Kiran Babu
Kiran Babu

Reputation: 1893

Try this, I Hope it's of help

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

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

            CloseDialog();

Upvotes: 0

Erhan Demirci
Erhan Demirci

Reputation: 4209

Button Name is MyButton.it's working.

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

Upvotes: 3

Nguyen  Minh Binh
Nguyen Minh Binh

Reputation: 24443

You should turn to use the simplest way that I always do as below:

@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;
        }
    }
};

Upvotes: 19

Tvd
Tvd

Reputation: 4601

Solution to my Problem :

Instead of using AlertBuilder and AlertDialog, I just called the dialog as :

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

And this worked well. All click events were handled within SettingDialog only. No changes were to be made in SettingDialog. Only the way to call SettingDialog is changed in the Activity. That's it.

BTW, In onClick() comapring a View with its name :

    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;
}

Also works perfectly. I use this way only and it works well. No need to check with the Id only.

Hope my solution will help others who are stuck like me. Thanks to all for your efforts and helping hand.

Upvotes: 1

Adil Soomro
Adil Soomro

Reputation: 37729

android:onClick="CloseDialog"

of Button in layout for Dialog searches the method in Activity class not in Dialog

define your method in Activity which is calling Dialog or remove android:onClick="CloseDialog" from tag and set OnClickListener from Java code in Dialog class.

Upvotes: 4

Shailendra Singh Rajawat
Shailendra Singh Rajawat

Reputation: 8242

add this method in java class :

public void CloseDialog(View v)
{

}

because in layout you have set android:onClick="CloseDialog"

Upvotes: 0

Yashwanth Kumar
Yashwanth Kumar

Reputation: 29131

i think you should compare the view id's not views

if (v == btn_save)

to

   if (v.getId() == btn_save.getId())

Upvotes: 8

Related Questions