1

私は一日中この問題と戦ってきたと思いますが、まだ正しく理解できていません。私は私の友人のためにいくつかのアプリを構築しています。私は ActionBarSherlock を使用しているので、アクションバーやページビューアーなどの他のものを使用できます。

とにかく、私は主な活動に取り掛かろうとしています: それぞれがフラグメント (3 つの異なるフラグメント) を表示する 3 つのタブと、それらのフラグメントのそれぞれが fragmentPagerView を表示する必要があるため、フラグメントを前後にスクロールできます (おそらく「これを正しく理解した後、ある時点でスクロールします)

問題は、タブを起動して実行している (apiDemos からいくつかのコードをコピーした) ことですが、タブを表示することができず、その理由を見つけることができません (クラッシュさえしません)。

これは、navActionbar (およびいくつかのオプション) を保持する MainActivity です。

public class MainActivity extends SherlockFragmentActivity
{
    SherlockFragment yesTabFragment = new YesTabFragment();
    SherlockFragment newTabFragment = new NewTabFragment();
    SherlockFragment trendingTabFragment = new TrendingTabFragment();

    private void createTabs()
    {
        // put ActionBar to nav. mode
        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        ActionBar.Tab yesTab = actionBar
                .newTab()
                .setText("yes")
                .setTabListener(new TabListener<YesTabFragment>(
                        this, "yes", YesTabFragment.class));
        actionBar.addTab(yesTab);

        ActionBar.Tab trendingTab = actionBar
                .newTab()
                .setText("trending")
                .setTabListener(new TabListener<TrendingTabFragment>(
                        this, "trending", TrendingTabFragment.class));
        actionBar.addTab(trendingTab);

        ActionBar.Tab newTab = actionBar
                .newTab()
                .setText("new")
                .setTabListener(new TabListener<NewTabFragment>(
                        this, "new", NewTabFragment.class));
        actionBar.addTab(newTab);
    }

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        createTabs();
    }

    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater inflater = getSupportMenuInflater();
        inflater.inflate(R.menu.main_activity_menu, menu);
        return true;
    }

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

        public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz)
        {
            this(activity, tag, clz, null);
        }

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

            // Check to see if we already have a fragment for this tab, probably
            // from a previously saved state. If so, deactivate it, because our
            // initial state is that a tab isn't shown.
            mFragment = (SherlockFragment)mActivity.getSupportFragmentManager().findFragmentByTag(mTag);
            if (mFragment != null && !mFragment.isDetached())
            {
                FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
                ft.detach(mFragment);
                ft.commit();
            }
        }

        public void onTabSelected(Tab tab, FragmentTransaction ft)
        {
            if (mFragment == null)
            {
                mFragment = (SherlockFragment)SherlockFragment.instantiate(mActivity, mClass.getName(), mArgs);
                ft.add(android.R.id.content, mFragment, mTag);
            }
            else
            {
                ft.attach(mFragment);
            }
        }

        public void onTabUnselected(Tab tab, FragmentTransaction ft)
        {
            if (mFragment != null)
            {
                ft.detach(mFragment);
            }
        }

        public void onTabReselected(Tab tab, FragmentTransaction ft)
        {
            //Toast.makeText(mActivity, "Reselected!", Toast.LENGTH_SHORT).show();
        }
    }
}

私が言ったように、私は apiDemos から直接 TabListener 実装をコピーしました (私が書いたものはまったく同じでしたが)

これは、タブ フラグメントの 1 つの実装です (それらはすべて同じです)。

public class YesTabFragment extends SherlockFragment
{
    View _fragmentView;
    private Vector<stuff> list;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        _fragmentView = inflater.inflate(R.layout.yes_fragment, container, false);

        ViewPager pager = (ViewPager)_fragmentView.findViewById(R.id.gag_pager);
        API api = API.getInstance();

        list = api.get("Yes", 1, 10);
        MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getFragmentManager(), listOfGags);

        pager.setAdapter(adapter);

        return _fragmentView;
    }
}

yesTabFragment クラスの実装

public class YesTabFragment extends SherlockFragment
{
    View _fragmentView;
    private Vector<things> list;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        _fragmentView = inflater.inflate(R.layout.yes_fragment, container, false);

        ViewPager pager = (ViewPager)_fragmentView.findViewById(R.id.thing_pager);
        API api = API.getInstance();

        list = api.get("Yes", 1, 10);
        MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getFragmentManager(), list);

        pager.setAdapter(adapter);

        return _fragmentView;
    }
}

そしてもちろん、メインとはいタブの XML (ここでもタブはほとんど同じです)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/List"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>

</LinearLayout>

そしてyesTab

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/thing_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </android.support.v4.view.ViewPager>

</LinearLayout>

タブフラグメントがフレームレイアウトを置き換えず、ビューページャーを表示しない理由が本当にわかりません。

ここで何か大きなものを見逃していて、何が理解できないのでしょうか...

頭あ​​りがとう…

4

1 に答える 1

3

MainActivity には ViewPager 定義が含まれている必要があります。次に例を示します。

viewPager=(ViewPager)findViewById(R.id.pager);
FragmentManager fm = getSupportFragmentManager();

/** Defining a listener for pageChange */
ViewPager.SimpleOnPageChangeListener pageChangeListener = 
    new ViewPager.SimpleOnPageChangeListener()
    {
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
            actionBar.setSelectedNavigationItem(position);
        }
    };

/** Setting the pageChange listner to the viewPager */
viewPager.setOnPageChangeListener(pageChangeListener);

/** Creating an instance of FragmentPagerAdapter */
fragmentPagerAdapter = new PhotoMugFragmentPagerAdapter(fm);

/** Setting the FragmentPagerAdapter object to the viewPager object */
viewPager.setAdapter(fragmentPagerAdapter);
于 2012-11-15T14:28:44.447 に答える