今天碰到了这样一个问题,找了很多资料都没解决,记录一下,留给有缘人,希望你们不用花这么多时间
是这样的解决的:我尝试了在activity中使用tablayout+viewpager 并且使用FragmentStatePagerAdapter作为适配器,是没有问题的,但是嵌套Fragment就出现了问题,后来发现是上下文用错了,应该是嵌套的Fragment就不能使用全局的上下文,改成activity的上下文就可以了
同时注意嵌套Fragment拿到FragmentManager要用这个方法
getChildFragmentManager()
错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.oschina, PID:
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:)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:)
at android.app.ActivityThread.access$800(ActivityThread.java:)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:)
at android.os.Handler.dispatchMessage(Handler.java:)
at android.os.Looper.loop(Looper.java:)
at android.app.ActivityThread.main(ActivityThread.java:)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:)
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[], new NewStirFragment()));
mShowItems.add(new MoveStirFragmentInfo(titles[], new HotStirFragment()));
mShowItems.add(new MoveStirFragmentInfo(titles[], new MyStirFragment()));
MoveStirPagerAdapter adapter = new MoveStirPagerAdapter(getChildFragmentManager(), mShowItems);
mStirfragmentVp.setAdapter(adapter);
mStirfragmentTl.setupWithViewPager(mStirfragmentVp);
mStirfragmentTl.setTabTextColors(ColorStateList.valueOf(Color.BLACK));
}
}
只要将上面加粗的全局上下文改成getContext()就好了