2012-02-13 15 views
0

在片段中,我有一个按钮,我想用触发适配器“触发”从数据库填充Listview。Android错误将上下文传递给OnClick中的光标适配器(视图视图)

碎片的代码是这样的:

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()方法中使用它。

您正在创建一个新的匿名类,该类实现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    

希望它有助于

+0

嗯,我该怎么做?对不起,没有太多的android经验。 – tyb 2012-02-13 16:52:45

+0

当然你可以,只要有一个'Fragment'的封装实例,你可以像他在做的那样施放。我试过你的确切代码,tyb,并没有那个错误。确定你在演员阵容之后有所保存? – 2012-02-13 16:57:10

+0

是的,它现在也在工作。我保存了它,但错误没有消失,直到我修改文件。在Eclipse中肯定有一些小故障。谢谢你的时间! – tyb 2012-02-13 17:00:11

3

使用此db = new MyDatabase(getActivity());而不是上下文ctx =(Context)TabFragment6.this.getActivity();db = new MyDatabase(ctx);

+0

有什么区别?除了代码清洁。谢谢 – tyb 2012-02-13 16:50:14