3

フラグメントを使用してスクロール可能なタブを作成しようとしています。

タブも表示され、スクロールしています。しかし問題は、タブのコンテンツが表示されないことです。コンテンツを表示するためにフラグメントを使用しています。私はこのトピックの初心者です:フラグメント。このコードに欠けているものはありますか?

私を助けてください。

public class SrollableTab extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        ActionBar bar = getActionBar();
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
        bar.addTab(createTab("Tab 1"));
        bar.addTab(createTab("Tab 2"));
        bar.addTab(createTab("Tab 3"));
        bar.addTab(createTab("Tab 4"));
        bar.addTab(createTab("Tab 5"));
        bar.addTab(createTab("Tab 6"));

        if (savedInstanceState != null) {
            bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
        }
    }

    public Tab createTab(String tabTitle)
    {
        ActionBar bar = getActionBar();     
        Tab tab = bar.newTab().setText(tabTitle).setTabListener(new TabFragment());
        return tab;
    }

    class TabFragment extends Fragment implements TabListener
    {

        @Override
        public void onCreate(Bundle fragmentState)
        {
            super.onCreate(fragmentState);              
        }
        @Override
        public View onCreateView(LayoutInflater inflator, ViewGroup container, Bundle savedState)
        {       
            View view = inflator.inflate(R.layout.tab_content, container, false);
            TextView t = (TextView)view.findViewById(R.id.txtTab);
            t.setText("tab content");   
            return view;

        }
        @Override
        public void onActivityCreated(Bundle savedState)
        {
            super.onActivityCreated(savedState);
        }

        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {

        }

        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {

        }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {

        }   
    }
}

tab_content.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#ffffff" >

    <TextView android:id="@+id/txtTab" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:text="hello"  
        android:textColor="#ff0000"/>
</LinearLayout>
4

1 に答える 1

2

これは古いかもしれませんが、これに関する私自身の解決策を見つけました。

新しいマテリアルTabLayoutの使用を開始するまで、しばらくの間PagerSlidingTabStripを使用しました。どちらもアクティビティでは機能しますが、フラグメントでは機能しません。これは、フラグメントのバグに関するいくつかの議論です。

私が思いついた修正は、アクティビティの FragmentManager を使用する代わりに、 getChildFragmentManager()であるフラグメントの 1 つを使用する代わりに、FragmentManager が必要なコンストラクターパラメーターで viewpager のアダプター (通常は FragmentPagerAdapter で拡張) を設定することです。

それはそれを修正します。Android のバグは今でも私を悩ませています。

乾杯

于 2016-11-09T01:18:20.557 に答える