1

タブのレイアウトを作成するために application-setup を使用しました。レイアウトでアクション バーと ViewPager を使用して、多数のタブを表示します。現在、2 つのタブがあります。

ただし、タブフラグメントの1つにある特別なボタンが押されない限り、非表示になる3番目のタブを追加したいと思います。ボタンを押すと、アプリケーションが非表示のタブにスライドして表示できると思いました。後ろにスライドすると、再び非表示になります。

  1. これはそのままAndroidでも可能ですか?:)
  2. 現在の形式のタブ管理でこれをどのように実装しますか? レイアウトで TabActivity または TabHosts を使用している人々について、このような質問をいくつか見つけました。2 つの実装のうちの 1 つを使用する方が簡単でしょうか?

ソースコードが必要な場合は、お尋ねください。前もって感謝します。

4

1 に答える 1

3

ええ、あなたが求めていることはできます。

一言で言えば

非表示のタブを表示するように指定しonClickListenerた for で、Buttonを呼び出す必要がありますActionBar.addTab

新しいの追加Fragment

あなたの を含むレイアウトに応じて、andFragmentsを呼び出すことができますが、それ以外の場合は、を動的に追加しているため、 を使用していると想定します。その場合、 new を に追加します。FragmentTransaction.hideFragmentTransaction.showFragmentFragmentPagerAdapterFragmentList

リンク

アクションバー- addTab

FragmentTransaction -非表示表示

また、 Adding Fragments docsも読んでください。

非常に基本的な例を次に示します。

ViewPager のアダプター

public class PagerAdapter extends FragmentPagerAdapter {

/**
 * The list of {@link Fragment}s used in the adapter
 */
private final List<Fragment> mFragments = new ArrayList<Fragment>();

/**
 * Constructor for <code>PagerAdapter</code>
 * 
 * @param fm The {@link FragmentManager} to use.
 */
public PagerAdapter(FragmentManager fm) {
    super(fm);
}

/**
 * Adds a new {@link Fragment} to the adapter
 * 
 * @param fragment The new {@link Fragment} to add to the list
 */
public void addFragment(Fragment fragment) {
    mFragments.add(fragment);
    notifyDataSetChanged();
}

/**
 * {@inheritDoc}
 */
@Override
public Fragment getItem(int position) {
    return mFragments.get(position);
}

/**
 * {@inheritDoc}
 */
@Override
public int getCount() {
    return mFragments.size();
    }
}

ダミーフラグメント

public static final class DummyFragment extends Fragment implements View.OnClickListener {

    /**
     * Empty constructor as per the {@link Fragment} docs
     */
    public DummyFragment() {
    }

    /**
     * @param color The color to make the root view
     * @return A new instance of {@link DummyFragment}
     */
    public static DummyFragment getInstance(int color) {
        final Bundle bundle = new Bundle();
        bundle.putInt("color", color);
        final DummyFragment fragment = new DummyFragment();
        fragment.setArguments(bundle);
        return fragment;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false);
        rootView.setBackgroundColor(getArguments().getInt("color"));
        return rootView;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // This should be your Button
        view.setOnClickListener(this);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void onClick(View v) {
        // This adds the new tab
        ((MainActivity) getActivity()).addTab(2, Color.BLUE);
        }
   }

各フラグメントを追加するために呼び出されます

    /**
 * Used to add a new {@link Fragment} to {@link ViewPager}'s adapter and
 * adds a new {@link Tab} to the {@link ActionBar}.
 * 
 * @param pageTitle The title of the tab
 * @param color The background color of the {@link Fragment}
 */
public void addTab(int pageTitle, int color) {
    mPagerAdapter.addFragment(DummyFragment.getInstance(color));
    mActionBar.addTab(mActionBar.newTab()
            .setText("" + pageTitle)
            .setTabListener(this));
}
于 2013-03-18T07:51:48.187 に答える