簡體   English   中英

Android膨脹異常-ViewPager

[英]Android inflate exception - ViewPager

我正在嘗試使用教程在我的應用程序中實現pageviewer。 但是我的應用程序關閉了。 它顯示android.view.InflateException: Binary XML file line #2: Error inflating class com.example.viewpager.ScrollView 我要去哪里錯了? 我是android的初學者,所以請指導我。 我以為我的應用程序支持API 10,所以我可能導入了錯誤的庫。因此我搜索了其他答案,但沒有用。 這是我的代碼:

MainActvity.java

package com.example.viewpager;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;

public class MainActivity extends FragmentActivity {
/**
 * The number of pages (wizard steps) to show in this demo.
 */
private static final int NUM_PAGES = 5;

/**
 * The pager widget, which handles animation and allows swiping horizontally to access previous
 * and next wizard steps.
 */
private ViewPager mPager;

/**
 * The pager adapter, which provides the pages to the view pager widget.
 */
private PagerAdapter mPagerAdapter;

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

    // Instantiate a ViewPager and a PagerAdapter.
    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mPagerAdapter);
}

@Override
public void onBackPressed() {
    if (mPager.getCurrentItem() == 0) {
        // If the user is currently looking at the first step, allow the system to handle the
        // Back button. This calls finish() on this activity and pops the back stack.
        super.onBackPressed();
    } else {
        // Otherwise, select the previous step.
        mPager.setCurrentItem(mPager.getCurrentItem() - 1);
    }
}

/**
 * A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in
 * sequence.
 */
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
    public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return new ScreenSlidePageFragment();
    }

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

ScreenSlidePagerFragment.java

package com.example.viewpager;

import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ScreenSlidePageFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_screen_slide_page, container, false);

    return rootView;
}
}

actvity_main.xml

<?xml version="1.0" encoding="utf-8"?><android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />

fragment_slide_screen_page.xml

<?xml version="1.0" encoding="utf-8"?>
<com.example.viewpager.ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <TextView style="?android:textAppearanceMedium"
        android:padding="16dp"
        android:lineSpacingMultiplier="1.2"
        android:textColor="#000000"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Page 1" />

</com.example.viewpager.ScrollView>

日志貓:

android.view.InflateException: Binary XML file line #2: Error inflating class com.example.viewpager.ScrollView
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:386)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
    at com.example.viewpager.ScreenSlidePageFragment.onCreateView(ScreenSlidePageFragment.java:14)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
    at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
    at android.view.View.measure(View.java:8313)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
    at android.view.View.measure(View.java:8313)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
    at android.view.View.measure(View.java:8313)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
    at android.view.View.measure(View.java:8313)
    at android.view.ViewRoot.performTraversals(ViewRoot.java:845)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.ClassNotFoundException: com.example.viewpager.ScrollView in loader dalvik.system.PathClassLoader[/data/app/com.example.viewpager-2.apk]
    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at android.view.LayoutInflater.createView(LayoutInflater.java:471)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570)
    ... 33 more

將適配器更改為:

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
    int layouts[];
    public ScreenSlidePagerAdapter(android.support.v4.app.FragmentManager fm) {
        super(fm);
        layouts=new int[]{R.layout.fragment_slide_screen_page1,R.layout.fragment_slide_screen_page2,R.layout.fragment_slide_screen_page3,R.layout.fragment_slide_screen_page4,R.layout.fragment_slide_screen_page5};
    }

    @Override
    public Fragment getItem(int position) {

        ScreenSlidePageFragment fragment=new ScreenSlidePageFragment();
        fragment.setContent(layouts[position]);
        return fragment;
    }

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

並在片段中:

public class ScreenSlidePageFragment extends Fragment {
int layout;
public void setContent(int layout){  
   this.layout=layout;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(layout, container, false);

    return rootView;
}
}

盡管不確定每個片段都需要什么更改,但是上述操作將需要您創建5個布局xml,您可以在每次創建新的片段時進行設置。

甚至我遇到了崩潰。 這是因為我正在調用mAdapter.notifyDataSetChanged();

 @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {

        }

后來我將方法轉移到

@Override
        public void onPageSelected(int arg0) {
            mAdapter.notifyDataSetChanged();
        }

這樣就可以了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM