0

すべてのタブにTabListenerがアタッチされたFragmentActionBarタブがあります。私の主な活動では、次のようにタブの削除ボタンが表示されました。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()
        case R.id.closeTab:
            closeTab();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

public void closeTab() {
    if(getActionBar().getTabCount() > 1) {
            Tab tab = getActionBar().getSelectedTab();
            getActionBar().removeTab(tab);
    }
}

私が達成しようとしているのは、削除される前にタブフラグメントでコードを実行することです。これをフラグメントに配置することもできonDestroyView()ますonDestroy()が、[削除]タブボタンを押したときにのみこのコードを実行したいと思います。ドキュメントを確認しましたTabListenerが、TabListenerはselectionchangesのみをリッスンしているようです。私のTabListener:

public TabListener(Activity a, String t, Class<T> c) {
    activity = a;
    tag = t;
    myClass = c;
}

/* The following are each of the ActionBar.TabListener callbacks */
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    // Check if the fragment is already initialized
    if (fragment == null) {
        // If not, instantiate and add it to the activity
        fragment = Fragment.instantiate(activity, myClass.getName());           
        ft.add(android.R.id.content, fragment, tag);

    } else {
        // If it exists, simply attach it in order to show it
        ft.attach(fragment);
    }
}

public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    if (fragment != null) {
        // Detach the fragment, because another one is being attached
        ft.detach(fragment);
    }
}

public void onTabReselected(Tab tab, FragmentTransaction ft) {
}

質問を明確にするために:タブが削除される前にフラグメントでコードを実行するにはどうすればよいですか?

4

1 に答える 1

0

さて、私はこの投稿を読んだ後にそれを理解しました:リンク。私の断片に私は入れましたsetHasOptionMenu(true)

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setHasOptionsMenu(true); 
}

そしてonOptionsItemSelected、フラグメントを追加するだけで済みます。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
    case R.id.closeTab:
        closeTab();                
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

public void closeTab() {
    ActionBar actionBar = getActivity().getActionBar();
    if(actionBar.getTabCount() > 1) {
            Tab tab = actionBar.getSelectedTab();
            actionBar.removeTab(tab);
            Log.d(TAG, "CLOSED TAB");
    }
}
于 2012-08-12T12:00:14.450 に答える