0

3つのフラグメントをロードするAndroidサポートフレームワークを使用するViewPagerがあります。ユーザーはスワイプすることでそれらの間を移動できます。

2番目のフラグメントには、アダプターを使用して、それぞれがボタンで埋められた2つのGridViewが含まれています。

2つのGridViewには、(XMLでは)left_buttonsとright_buttonsという名前が付けられています。left_buttonsはBaseAdapterを拡張するCategoryAdapterによって制御され、right_buttonsはBaseAdapterも拡張するItemAdapterによって制御されます。

私が抱えている問題は、ユーザーがCategoryAdapterのボタンをクリックしたときに、ItemAdapterでnotifyDataSetChanged()を呼び出し、続いて関連するGridViewでinvalidateViews()を呼び出したいということです。2つのアダプターは同じフラグメント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を介してコンテキストにアクセスできますが、それは役に立たないようです。

どんな助けでも大歓迎です!

4

1 に答える 1

0

おそらくアダプターにアクティビティーのコンテキストがあるので、次のようなアクティビティー内にメソッドを作成できます。

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

そして、CategoryAdapterで:

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