2013-01-31 53 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

這是正確的做法。 –