關於Fragment嵌套Fragment並且使用tablayout的錯誤

今天碰到了這樣一個問題,找了很多資料都沒解決,記錄一下,留給有緣人,希望你們不用花這麼多時間

是這樣的解決的:我嘗試了在activity中使用tablayout+viewpager 並且使用FragmentStatePagerAdapter作爲適配器,是沒有問題的,但是嵌套Fragment就出現了問題,後來發現是上下文用錯了,應該是嵌套的Fragment就不能使用全局的上下文,改成activity的上下文就可以了

同時注意嵌套Fragment拿到FragmentManager要用這個方法
getChildFragmentManager()

錯誤:

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: com.example.oschina, PID: 15882
                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.oschina/com.example.oschina.ui.activity.YhdActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class android.support.design.widget.TabLayout
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                                                                         at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                         at android.os.Looper.loop(Looper.java:135)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at java.lang.reflect.Method.invoke(Method.java:372)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                                                                      Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class android.support.design.widget.TabLayout

下面是Activity

package com.example.oschina.ui.activity;

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;

import com.example.oschina.R;
import com.example.oschina.ui.fragment.homefragment.MoveStirFragment;

public class YhdActivity extends AppCompatActivity {

/*    @Bind(R.id.stirfragment_tl)
    TabLayout mStirfragmentTl;
    @Bind(R.id.stirfragment_vp)
    ViewPager mStirfragmentVp;
    private List<MoveStirFragmentInfo> mShowItems = new ArrayList<>();*/


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_yhd);
        /*ButterKnife.bind(this);*/

/*        //通過Stringarray數組去獲取字符串
        String[] titles = Utils.getStringArray(R.array.tab_names);
        mShowItems.add(new MoveStirFragmentInfo(titles[0], new NewStirFragment()));
        mShowItems.add(new MoveStirFragmentInfo(titles[1], new HotStirFragment()));
        mShowItems.add(new MoveStirFragmentInfo(titles[2], new MyStirFragment()));

        MoveStirPagerAdapter adapter = new MoveStirPagerAdapter(getSupportFragmentManager(), mShowItems);
        mStirfragmentVp.setAdapter(adapter);
        mStirfragmentTl.setupWithViewPager(mStirfragmentVp);*/


        FragmentManager supportFragmentManager = getSupportFragmentManager();
        supportFragmentManager.beginTransaction().add(R.id.main_fragment,new MoveStirFragment()).commit();


    }
}

下面是外層的Fragment

package com.example.oschina.ui.fragment.homefragment;

import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.oschina.OSChinaApplication;
import com.example.oschina.R;
import com.example.oschina.adapter.MoveStirPagerAdapter;
import com.example.oschina.bean.MoveStirFragmentInfo;
import com.example.oschina.ui.fragment.strifragment.HotStirFragment;
import com.example.oschina.ui.fragment.strifragment.MyStirFragment;
import com.example.oschina.ui.fragment.strifragment.NewStirFragment;
import com.example.oschina.utils.Utils;

import java.util.ArrayList;
import java.util.List;

/**
 * 動彈Fragment
 * Created by Sang on 2016-12-04.
 */

public class MoveStirFragment extends Fragment {
    private TabLayout mStirfragmentTl;
    private ViewPager mStirfragmentVp;

    private List<MoveStirFragmentInfo> mShowItems = new ArrayList<>();


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View successView = View.inflate(**OSChinaApplication.mContext**, R.layout.fragment_movestir, null);
        mStirfragmentTl = (TabLayout) successView.findViewById(R.id.stirfragment_tl);
        mStirfragmentVp = (ViewPager) successView.findViewById(R.id.stirfragment_vp);

        initView();

        return successView;
    }

    private void initView() {
        String[] titles = Utils.getStringArray(R.array.tab_names);

        mShowItems.add(new MoveStirFragmentInfo(titles[0], new NewStirFragment()));
        mShowItems.add(new MoveStirFragmentInfo(titles[1], new HotStirFragment()));
        mShowItems.add(new MoveStirFragmentInfo(titles[2], new MyStirFragment()));

        MoveStirPagerAdapter adapter = new MoveStirPagerAdapter(getChildFragmentManager(), mShowItems);
        mStirfragmentVp.setAdapter(adapter);
        mStirfragmentTl.setupWithViewPager(mStirfragmentVp);
        mStirfragmentTl.setTabTextColors(ColorStateList.valueOf(Color.BLACK));
    }


}

只要將上面加粗的全局上下文改成getContext()就好了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章