2013-01-31 46 views
0

我有一个ViewPager使用Android支持框架,它加载了三个片段。用户可以通过滑动在它们之间导航。在android中的单个片段内的gridviews之间进行通信

第二个片段包含两个GridView,每个GridView使用一个适配器填充按钮。

这两个GridView被命名为(用XML表示)left_buttons和right_buttons。 left_buttons由扩展BaseAdapter的CategoryAdapter控制,Right_buttons由也扩展BaseAdapter的ItemAdapter控制。

我遇到的问题是,当用户单击CategoryAdapter中的按钮时,我想调用ItemAdapter上的notifyDataSetChanged(),然后在关联的GridView上调用invalidateViews()。因为这两个适配器是在同一个片段MenuFragment中创建的,所以我正在努力寻找它们之间进行通信的最佳方式。

我见过很多关于片段之间以及片段和活动之间进行通信的答案,等等。我尝试从CategoryAdapter中获取对R.id.right_buttons的引用,但找不到解决方案(因为无法访问findViewById等)。

然后,我读了一些答案,暗示我需要建立在片段的方法,所以我想在MenuFragment.class如下:

public void updateRightGrid() { 

//grab a reference to the right hand grid right_buttons 
GridView rightButtons = (GridView) getView().findViewById(R.id.right_buttons); 

    //get the adapter that is controlling right_buttons 
ItemAdapter menuItemAdapter = (ItemAdapter) rightButtons.getAdapter(); 

    //tell this adapter that we have some new data, so please refresh 
menuItemAdapter.notifyDataSetChanged(); 

//force the grid to refresh 
rightButtons.invalidateViews(); 

} 

的问题是,我仍然无法找到从CategoryAdapter调用此方法的方法。我创建了一个实现OnClickListener的内部类,并在public void onClick(View v)我试图调用该片段的方法updateRightGrid()。我可以通过变量mContext访问上下文,但这似乎没有帮助。

任何帮助将不胜感激!

回答

0

你可能有你的活动的情况下在你的适配器,这样就可以使一个方法类似的活动中:

//your activity code 
public void notifyItemAdapter() { 
    itemAdapter.notifyDataSetChanged() ; 
} 

,然后在CategoryAdapter:

//adapter code 
activityContext.notifyItemAdapter(); 
+0

上下文肯定是存在的。我使用:'leftButtons.setAdapter(new CategoryAdapter(this.getActivity()));'传递上下文。然而,当我添加一个方法到FragmentActivity,如:'公共无效notifyItemAdapter(){ \t Toast.makeText(getApplicationContext(),“msg msg”,Toast.LENGTH_SHORT).show(); }'我在Eclipse中出现以下错误:'方法notifyItemAdapter()未定义类型 上下文“ - 这是另一个片段吗? – tmhumble

+0

好的 - 我认为我已经解决了 - 我需要投射背景。所以,我最终调用了方法:'((MyFragmentActivity)mContext).notifyItemAdapter();' - 到目前为止似乎没问题。 – tmhumble

+0

这是正确的做法。 –