2016-01-03 62 views
1

我有我想提出一個滑動式的介紹了一個項目,其中用戶主要通過介紹他/她到應用四頁揮筆,並解釋它的功能,等等。但是,我不斷得到以下錯誤:創建刷卡片段

android.content.res.Resources$NotFoundException: Resource ID #0x0 
at android.content.res.Resources.getValue(Resources.java:1351) 
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2774) 
at android.content.res.Resources.getLayout(Resources.java:1165) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:421) 
at com.scyon.gradebook.WelcomeFragment.onCreateView(WelcomeFragment.java:40) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) 
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) 
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1106) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:952) 
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1474) 
at android.view.View.measure(View.java:18788) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:610) 
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:677) 
at android.view.View.measure(View.java:18788) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
at android.view.View.measure(View.java:18788) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
at android.view.View.measure(View.java:18788) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
at android.view.View.measure(View.java:18788) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
at android.view.View.measure(View.java:18788) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) 
at android.view.View.measure(View.java:18788) 
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) 
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
at android.view.Choreographer.doFrame(Choreographer.java:606) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.Zygote 

我的項目的組織結構如下:

enter image description here

,我有我的IntroActivity:

public class IntroActivity extends AppCompatActivity { 

private SectionsPagerAdapter mSectionsPagerAdapter; 
private ViewPager mViewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_feature); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

} 

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 

     if (position == 0) { 

      return new WelcomeFragment().newInstance("testtitle#1",R.layout.fragment_welcome_one,R.id.welcome1); 

     }else if (position == 1){ 

      return new WelcomeFragment().newInstance("testtitle#2", R.layout.fragment_welcome_two, R.id.welcome2); 

     }else if (position == 2){ 

      return new WelcomeFragment().newInstance("testtitle#3", R.layout.fragment_welcome_three, R.id.welcome3); 

     }else if (position == 3){ 

      return new WelcomeFragment().newInstance("testtitle#4", R.layout.fragment_welcome_four, R.id.welcome4); 

     } 

     return null; 
    } 

    @Override 
    public int getCount() { 
     return 4; 
    } 

} 
} 

最後我有我的WelcomeFragment模型類:

public class WelcomeFragment extends Fragment { 

String mTitle; 
int mLayoutID; 
int mTitleID; 

public WelcomeFragment() { 

} 

public WelcomeFragment newInstance(String title, int layoutID, int titleID) { 

    WelcomeFragment mWelcomeFragment = new WelcomeFragment(); 

    mTitle = title; 
    mLayoutID = layoutID; 
    mTitleID = titleID; 

    return mWelcomeFragment; 
} 

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

    View rootView = inflater.inflate(mLayoutID,container,false); 
    TextView textView = (TextView)rootView.findViewById(mTitleID); 
    Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Thin.ttf"); 
    textView.setText(mTitle); 
    textView.setTypeface(font); 

    return rootView; 
} 
} 

任何幫助,將不勝感激。我已經通過我的代碼好幾次了,我看到的是,資源ID是假想空,但我不明白爲什麼是這樣的情況。

回答

2

問題是,除了newInstance()之外,您還在調用默認構造函數,因此您要連續創建兩個碎片,並且第一個碎片沒有佈局ID。

充分利用newInstance()方法靜態的,所以你不必爲了調用newInstance()方法來創建一個虛擬對象:

public static WelcomeFragment newInstance(String title, int layoutID, int titleID) { 

    WelcomeFragment mWelcomeFragment = new WelcomeFragment(); 

    mTitle = title; 
    mLayoutID = layoutID; 
    mTitleID = titleID; 

    return mWelcomeFragment; 
} 

然後,把它作爲一個靜態方法,而不是調用new WelcomeFragment()

@Override 
public Fragment getItem(int position) { 

    if (position == 0) { 

     return WelcomeFragment.newInstance("testtitle#1",R.layout.fragment_welcome_one,R.id.welcome1); 

    }else if (position == 1){ 

     return WelcomeFragment.newInstance("testtitle#2", R.layout.fragment_welcome_two, R.id.welcome2); 

    }else if (position == 2){ 

     return WelcomeFragment.newInstance("testtitle#3", R.layout.fragment_welcome_three, R.id.welcome3); 

    }else if (position == 3){ 

     return WelcomeFragment.newInstance("testtitle#4", R.layout.fragment_welcome_four, R.id.welcome4); 

    } 

    return null; 
} 
+0

或者,我可以將我的代碼從newInstance()方法傳遞給構造函數嗎? – Markoe7

+0

是的,其實我寫了截至第一的答案,於是決定去改變它。無論哪種方式都很好.... –