关于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()就好了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值