关于Fragment嵌套Fragment并且使用tablayout的错误

来源:互联网 发布:淘宝省钱网站 编辑:程序博客网 时间:2024/06/05 15:11

今天碰到了这样一个问题,找了很多资料都没解决,记录一下,留给有缘人,希望你们不用花这么多时间

是这样的解决的:我尝试了在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
原创粉丝点击