Android Dialog Nosuchmethodexception Error When Using Xml Onclick
Solution 1:
You are trying to call the method "Action_ShowDialog_Buy", but this method doesn't exist in the Dialog object! This method should not be in the Activity, if you specify it in the xml. If you want to handle the click in the Activity, you should set the onClickListener programatically:
Button b=(Button)BuyDialog.findViewById(R.id.Button_Buy);
b.setOnClickListener(newOnClickListener(){
@OverrideonClick(View v){
BuyDialog.dismiss();
}
});
Solution 2:
and below:
Caused by: java.lang.NoSuchMethodException:BuyActivity.ActionShowDialog_Buy
lock at this ActionShowDialog_Buy
you forget simbol _
in name of the method
Solution 3:
You have to use set clickable true in your xml file.
<!-- dialog_buy.xml --><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><!-- Other stuff --><Buttonandroid:id="@+id/Button_Buy"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/Some_Other_Stuff"android:layout_centerHorizontal="true"android:text="@string/button_buy"android:onClick="Action_ShowDialog_Buy"android:clickable="true" /></RelativeLayout>
Solution 4:
Thanks to everyone that tried to help.
I've managed to sort this out by creating a class derived from Dialog and using it, using this code:
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.RelativeLayout;
publicclassBuyDialogClassextendsDialog
{
//Ensure this Dialog has a Context we can use
Context mContext ;
publicBuyDialogClass(Context context) {
super(context);
mContext=context; //Store the Context as provided from caller
}
@OverrideprotectedvoidonCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
RelativeLayout ll=(RelativeLayout) LayoutInflater.from(mContext).inflate(R.layout.dialog_buy, null);
setContentView(ll);
}
}
This allowed me to call the dialog as this:
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shop);
initialize_PR();
display_PR();
BuyDialog=newBuyDialogClass(this);
//The setContentView is not necessary here as we call it on the onCreate//We can NOT access Dialog widgets from here,//because the dialog has not yet been shown.
}
publicvoidAction_ShowDialog_Buy(View view) {
BuyDialog.show() ;
//NOW, after showing the dialog, we can access its widgets
jobject_SeekBar_buy= (SeekBar) BuyDialog.findViewById(R.id.SeekBar_Dialog_Buy) ;
jobject_SeekBar_buy.setMax(PR_num_coins/currentPR_buy_price) ;
jobject_SeekBar_buy.setOnSeekBarChangeListener(this);
}
publicvoidAction_Buy_PR(View view) {
BuyDialog.dismiss() ;
}
I managed to do this by reading Using onClick attribute in layout xml causes a NoSuchMethodException in Android dialogs but I still do not understand this Context issue.
Solution 5:
Dialog uses ContextThemeWrapper
Now, exception we are getting...
java.lang.IllegalStateException: Could not find a method android:onClick="method"in the activity classandroid.view.ContextThemeWrapper
for onClick handler on view classandroid.widget.RadioButton withid'statusSuspend'
To get rid of this just use proper inflater
LayoutInflater.from(context) instead
((LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE))
getLayoutInflater()
Avoid void setContentView(int layoutResID) instead use void setContentView(View view)
And use same context in Dialog constructor i.e super(context)
At last please don't forget to define android:onClick="method" in Activity instead in your custom class
Post a Comment for "Android Dialog Nosuchmethodexception Error When Using Xml Onclick"