今天碰到了這樣一個問題,找了很多資料都沒解決,記錄一下,留給有緣人,希望你們不用花這麼多時間
是這樣的解決的:我嘗試了在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()就好了