0

我有一个使用 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 访问上下文,但这似乎没有帮助。

任何帮助将非常感激!

4

1 回答 1

0

您可能在适配器中有活动的上下文,因此您可以在活动中创建一个方法,例如:

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

然后在您的 CategoryAdapter 中:

//adapter code
activityContext.notifyItemAdapter();
于 2013-01-31T20:36:16.447 回答