0

ここに画像の説明を入力

以下に示すように、この機能をアプリに実装したいと考えています。

  1. アクション バーとアクション アイテムを使用したアクティビティ
  2. アクションバーの下のタブ
  3. 各タブにはコンテンツがあります。

Tab フラグメントと TabListeners を使用してコーディングしました。アプリを実行すると、タブ ビューが表示されますが、ビュー ページャーとインジケーターが表示されません。以下に示すようなアクティビティを取得しています。 ここに画像の説明を入力

私のコードは以下のとおりです。

TabViewActivity .java

public class TabViewActivity extends SherlockFragmentActivity {
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            copyPrivateRawResuorceToPubliclyAccessibleFile();

            ActionBar actionBar = getSupportActionBar();
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            // add tabs
            Tab tab1 = actionBar
                    .newTab()
                    .setText("Details")
                    .setTabListener(
                            new TabListener<TabFragment>(this, "tab1",
                                    TabFragment.class));
            actionBar.addTab(tab1);

            Tab tab2 = actionBar
                    .newTab()
                    .setText("Maps")
                    .setTabListener(
                            new TabListener<TabFragment>(this, "tab2",
                                    TabFragment.class));
            actionBar.addTab(tab2);

            // check if there is a saved state to select active tab
            if (savedInstanceState != null) {
                getSupportActionBar().setSelectedNavigationItem(
                        savedInstanceState.getInt(ACTIVE_TAB));
            }
        }

TabListener.java

public class TabListener<T extends SherlockFragment> implements
        ActionBar.TabListener {
    private SherlockFragment mFragment;
    private final SherlockFragmentActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;

    public TabListener(Activity activity, String tag, Class<T> clz) {
        mActivity = (SherlockFragmentActivity) activity;
        mTag = tag;
        mClass = clz;
    }


    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // Check if the fragment has already been initialised
        SherlockFragment preInitializedFragment = (SherlockFragment) mActivity
                .getSupportFragmentManager().findFragmentByTag(mTag);
        if (mFragment != null) {
            // If it exists, simply attach it in order to show it
            ft.attach(mFragment);
        } else if (preInitializedFragment != null) {
            mFragment = preInitializedFragment;
            ft.attach(mFragment);
        } else {
            // Not found, so instantiate and add it to the activity
            mFragment = (SherlockFragment) SherlockFragment.instantiate(
                    mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        }
    }

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

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // User selected the already selected tab. Usually do nothing.
    }

TabFragment.java

public class TabFragment extends SherlockFragment {
      // your member variables here
      @Override
      public View onCreateView(LayoutInflater inflater, 
                     ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.main, container, false);
        // do your view initialization here
        return view;
      }

    }

タブをクリックするたびに、details.java と maps.java という名前の 2 つの異なるクラスがあります。このコードを配置する場所を教えてください。ビューページャーも実装しました。これは、詳細タブのビュー ページャー コードです。

詳細Activity.java

public class DetailsActivity extends BaseSampleActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.place_details_layout);

        mAdapter = new TestFragmentAdapter(getSupportFragmentManager());

        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

        mIndicator = (CirclePageIndicator)findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);


    }
}

BaseSampleActivity.java

public abstract class BaseSampleActivity extends FragmentActivity {
    private static final Random RANDOM = new Random();

    TestFragmentAdapter mAdapter;
    ViewPager mPager;
    PageIndicator mIndicator;
    //FragmentTabHost mTabHost;


    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.random:
                final int page = RANDOM.nextInt(mAdapter.getCount());
                Toast.makeText(this, "Changing to page " + page, Toast.LENGTH_SHORT);
                mPager.setCurrentItem(page);
                return true;

            case R.id.add_page:
                if (mAdapter.getCount() < 10) {
                    mAdapter.setCount(mAdapter.getCount() + 1);
                    mIndicator.notifyDataSetChanged();
                }
                return true;

            case R.id.remove_page:
                if (mAdapter.getCount() > 1) {
                    mAdapter.setCount(mAdapter.getCount() - 1);
                    mIndicator.notifyDataSetChanged();
                }
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
4

1 に答える 1

1

のコードが表示されませんViewPager。Jake Wharton のFragmentTabsPagerのサンプル コードを確認してください。

于 2012-12-01T05:40:02.420 に答える