2012-12-06 7 views
16

フラグメントが見つかりました。グリッドビューを使用しています。グリッドビューの画像をタップしたときにメニューを表示します。表示されたメニューから実行するアクションを選択します。java.lang.illegalstateexceptionがアクティビティクラスのメソッド(ビュー)を見つけられませんでした。私のプログラムでアンドロイドの

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> 

Iこのコードを使用すると、エラーが発生しました:

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' 

問題はどこにあるの? はそれだけActivityためにを検索するとAndroidがそれを見つけることができませんので、あなたが

+0

1行ではなくスタックトレース全体を投稿して、コード内の行番号を指摘してください – nandeesh

答えて

39

あなたはFragmentクラスで(Dialogのレイアウトから)Buttonについて(を使用して)onClickコールバックを登録することはできませんありがとうございましたその名前に一致するメソッド(Btn_pumpInfo_Clicked)があり、その例外がスローされます。代わりにDialogButtonを探し、それを通常のリスナー割り当てる:

//... 
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 
    } 
}); 

またはメソッドを移動:それはあなたに合う場合Activityクラスに

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

を。

+1

@ user1793700私の答えが正しいとマークすることができれば質問になります答えになる。 'Dialog'クラスを使うつもりならば、' Dialog'を拡張して独自のダイアログを作成し、そのクラスでコンテンツビューを設定してリスナを設定すると、2つのオプションのどちらを使ったのか分かりません。 – Luksprog

+0

どのように私は正しいとマークすることができますか分からない!どうやって私に説明することができますか?私は私の場合、最初のオプションを使用し、それは私のために働く:)あなたのコメントのおかげで:) – user1793700

+0

私は自分のコードで自分のダイアログを使用して、それは本当ですか? – user1793700

3

このバグは、唯一のAndroid 2.xのに起こっている場合は、Android 4特定のクラスのメンバーのためにあなたのActivityクラス階層を確認してください。

public class HomeActivity extends Activity { 

    private android.app.ActionBar.LayoutParams customTitleParams; 

    .... 
} 

クラスandroid.app.ActionBar.LayoutParamsは、Android 2.xと、この缶には使用できません。問題が発生します。

+0

私はこの同じ問題を抱えています、そして、あなたはそれを頭に打ったかもしれないと思います。私はジンジャーブレッドで私のアプリケーションをテストするかもしれないと思ったが、私のonClick(View v)がクラスandroid.support.v7.widget.AppCompatImageButtonでクラッシュしていて見つからない。 –

0

これは、ビュー(ボタン)のonClickを呼び出すメソッドにアクセスできない場合、またはそれぞれのアクティビティで利用できない場合にも発生します。チェックする 手順:

  • は、Androidのための値でメソッド名を確認してください:のonClick属性は、実際に書かれた方法と一致します。
  • メソッドのアクセス修飾子がpublicであることを確認して、 が実行できるようにします。
関連する問題