0

フラグメント内に、Cursor Adapter を使用して、データベースから Listview への入力を「トリガー」するボタンがあります。

フラグメントのコードは次のようになります。

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() は、型 new View.OnClickListener(){} に対して未定義です。

どうすればこれを修正できますか? ありがとう!!

4

2 に答える 2

3

これを使用して ください db = new MyDatabase(getActivity()); Context ctx = (Context)TabFragment6.this.getActivity();の代わりに そして db = new MyDatabase(ctx);

于 2012-02-13T16:37:17.807 に答える
1

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

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

次のようになります。

@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            

それが役に立てば幸い

于 2012-02-13T16:43:19.583 に答える