1

MainActivityと の 2 つのフラグメントを持つタブ バーを含む がありMainFragmentますWishlistFragment。どちらも として拡張されListFragmentます。

誰かがオプションメニューからメニュー項目に触れたとき、表示されている Fragment 内の ListView が、というカスタムアダプターを使用してリストを更新するようにしLazyAdapter adapterます。

MainActivityしたがって、ここでは、コードで更新を行いたい場所を示します。

public boolean onOptionsItemSelected(MenuItem item) {   
     switch (item.getItemId()) {
        case R.id.menu_edit:

               // find out which fragment is showing here
               // refresh the fragment's listview here
               // adapter.notifyDataSetChanged();

               return true;
        }
}

これどうやってするの?フラグメントに転送する方法と、どのフラグメントが表示されているかを判断する方法がわかりません。

でタブを設定する方法は次のMainActivityとおりです。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    actionBar.addTab(actionBar.newTab().setText("Main").setTabListener(this));
    actionBar.addTab(actionBar.newTab().setText("Wishlist").setTabListener(this));
}

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    // When the given tab is selected, show the tab contents in the container
    ListFragment newfragment = null;

    switch (tab.getPosition() + 1)
    {
    case 1:
        newfragment = new MainFragment();
        break;

    case 2:
        newfragment = new WishlistFragment();           
        break;
    }

    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, newfragment)
            .commit();
}
4

1 に答える 1

4

これどうやってするの?

ステップ #1: の実装を修正しますonTabSelected()。ユーザーがタブを選択するたびに新しいフラグメントを作成する必要はありません。代わりに、データ メンバー内のアクティビティによって保持される 2 つのフラグメントを用意し、それらをreplace()トランザクションで使用する必要があります。

ステップ #2: 必要に応じて を呼び出しgetSelectedNavigationIndex()ActionBarそれを使用して必要な 2 つのフラグメント (上記のステップ #1 で説明したデータ メンバーから取得) を選択し、フラグメントに対して何らかのメソッドを呼び出して、必要なことを行います。

于 2012-11-02T21:15:27.260 に答える