2012-02-13 8 views
0

フラグメント内に、カーソルアダプタを使用してデータベースからリストビューの塗りつぶしを開始するボタンがあります。OnClick(ビュービュー)内のカーソルアダプタにコンテキストを渡すとAndroidエラーが発生する

フラグメントのコードは次のようなものになる:

public class TabFragment6 extends ListFragment { 
/** (non-Javadoc) 
* @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) 
*/ 



     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 


     } 


     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

      LinearLayout Layout6 = (LinearLayout) inflater.inflate(R.layout.tab_frag6_layout, container, false); 

      // Register for the Button.OnClick event 
       Button bShopGuit = (Button)Layout6.findViewById(R.id.buttonshopguit); 
       bShopGuit.setOnClickListener(new View.OnClickListener() {   //abre setonclicklistener(
        @Override 
        public void onClick(View v) { 


         Cursor allItems; 
         MyDatabase db; 

         Context ctx = (Context)TabFragment6.this.getActivity(); 


         db = new MyDatabase(ctx); 
         allItems = db.getGuitarItems(); 


         ListAdapter adapter = new SimpleCursorAdapter (ctx, 
           android.R.layout.simple_list_item_1, 
           allItems, 
           new String[] {"ItemName"}, 
           new int[] {android.R.id.text1}); 

         getListView().setAdapter(adapter); 
        } 
       });                 //fecha) 




      return Layout6; 
     } 

しかし、私はアダプター内のエラーを取得しています:方法getactivity()タイプの新しいView.OnClickListener(のために定義されていませんが) {}

どうすればこの問題を解決できますか?ありがとう!!

答えて

1

あなたはnew View.OnClickListener() {インタフェース でgetActivity()を呼び出すことはできません。あなたのアクティビティに最終的な参照 を作成し、onClick()メソッド内で使用することをお勧めします。

にはgetActivity()メソッドがないView.OnClickListenerインターフェイスを実装する新しい匿名クラスを作成しています。

このようなものでなければなりません:

@Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

      LinearLayout Layout6 = (LinearLayout) inflater.inflate(R.layout.tab_frag6_layout, container, false); 
    final Activity activity = this.getActivity(); //this will call your tabfragment's associated activity 


    ............ 
//and in your onClick() 
      db = new MyDatabase(activity); // or try to use the Contexts or cast to them depends on your constructor parameters    

はそれが

+0

うーん、どうすればいい?申し訳ありません、アンドロイドで多くの経験がありません。 – tyb

+0

「フラグメント」のカプセル化されたインスタンスがある限り、自分が行っているようにキャストすることができます。あなたの正確なコード、tybを試しましたが、そのエラーはありませんでした。あなたはあなたのキャストをした後に救いましたか? –

+0

はい、現在も機能しています。私はそれを保存しましたが、ファイルを変更するまで、エラーは消えませんでした。 Eclipseで不具合があったはずです。御時間ありがとうございます! – tyb

3

これを使用db = new MyDatabase(getActivity()); の代わりにコンテキストctx =(コンテキスト)TabFragment6.this.getActivity();およびdb = new MyDatabase(ctx);それはそこにこのメソッドを持っていないため

+0

を役に立てば幸い違いは何ですか?コードの清潔さのほかに。ありがとう – tyb

関連する問題