Java.lang.illegalstateexception не смог найти метод (представление) в фрагменте андроида класса активности

В моей программе я использую gridview с некоторыми изображениями, я хочу показать меню, когда пользователь постучал по изображению в gridview, а затем выберите действие, которое нужно сделать из показанного меню.

Вот мои коды:

package Kazemi.Alireza.scada; import android.annotation.SuppressLint; import android.app.Dialog; import android.app.FragmentManager; import android.content.Context; import android.graphics.Typeface; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; @SuppressLint("NewApi") public class CitiesTab extends Fragment { AnimationDrawable[] frameAnimation; ImageAdapter ia; GridView gridView; int in; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return (LinearLayout)inflater.inflate(R.layout.citytab, container, false); } public void onStart() { super.onStart(); ia = new ImageAdapter(getActivity()); gridView = (GridView) getActivity().findViewById(R.id.gridview); gridView.setAdapter(ia); gridView.post(new Starter()); gridView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { dialog = new Dialog(getActivity(), android.R.style.Theme_InputMethod); dialog.setContentView(R.layout.pump_menu); }}); /*Button btn = (Button) getActivity().findViewById(R.id.Button_pumpInfo); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(getActivity(), "You clicked on Item 1", Toast.LENGTH_LONG).show(); } });*/ } public void Btn_pumpInfo_Clicked(View v) { // TODO Auto-generated method stub Toast.makeText(getActivity(), "You clicked on Item 1", Toast.LENGTH_LONG).show(); } 

}

Вот мой код pump_menu.xml:

 <?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="fill_parent" android:background="#a5c5f0" android:orientation="vertical" > <Button android:id="@+id/Button_pumpInfo" android:layout_height="40dp" android:text="@string/menu_pumpinfo_item1" android:textSize="11sp" android:layout_width="125dp" android:background="#a5c5f0" android:onClick="Btn_pumpInfo_Clicked"/> 

И citytab.xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <GridView android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:columnWidth="90dp" android:stretchMode="columnWidth" android:gravity="center" /> <ImageView android:id="@+id/gifViewer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="center"/> </LinearLayout> 

Когда я использую этот код, произошла ошибка:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{Kazemi.Alireza.scada/Kazemi.Alireza.scada.MainMenu}: java.lang.NullPointerException 

И когда я комментирую метод Btn_pumpInfo_Clicked () и раскомментировал прослушиватель кнопок в onStart (), возникает следующая ошибка:

 java.lang.IllegalStateException: Could not find a method Btn_pumpInfo_Clicked(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'Button_pumpInfo' 

в чем проблема? Спасибо

Вы не можете зарегистрировать обратный вызов onClick (используя android:onClick ) для Button (из макета Dialog ) в классе Fragment потому что Android не найдет его, поскольку он будет искать только Activity для метода, соответствующего этому имени ( Btn_pumpInfo_Clicked ), И он выкинет это исключение. Вместо этого найдите Button в Dialog окне и назначьте ее обычным слушателем:

 //... dialog.setContentView(R.layout.pump_menu) Button b = (Button) dialog.findViewById(R.id.Button_pumpInfo); b.setOnClickListener(new OnClickListener() { @Override public void onCLick(View v) { // profit } }); 

Или переместите метод:

 public void Btn_pumpInfo_Clicked(View v) { // TODO Auto-generated method stub Toast.makeText(getActivity(), "You clicked on Item 1", Toast.LENGTH_LONG).show(); } 

В классе Activity если он вам подходит.

Если эта ошибка происходит только на Android 2.x, проверьте свою иерархию классов активности для определенных членов класса Android 4:

 public class HomeActivity extends Activity { private android.app.ActionBar.LayoutParams customTitleParams; .... } 

Класс android.app.ActionBar.LayoutParams недоступен на Android 2.x, и это может вызвать проблему.

Это также может произойти, когда метод вызова onClick в представлении (Button) недоступен или недоступен в соответствующем действии. Шаги для проверки:

  • Проверьте имя метода в значении для android: атрибут onClick соответствует фактически написанному методу.
  • Проверка модификатора доступа метода является общедоступной, чтобы быть доступной для выполнения.