我有一个使用 Android 支持框架的 ViewPager,它加载了三个片段。用户可以通过滑动在它们之间导航。
第二个片段包含两个 GridView,每个都使用一个 Adapter 填充 Button。
这两个 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 等)。
然后,我阅读了一些建议我需要在 Fragment 中创建方法的答案,因此我在 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 访问上下文,但这似乎没有帮助。
任何帮助将非常感激!