4

I'm learning how to implement horizontal swiping and I'm getting the following error while trying to launch my app having ViewPager in its layout.

03-25 17:12:13.166: E/AndroidRuntime(19449): FATAL EXCEPTION: main
03-25 17:12:13.166: E/AndroidRuntime(19449): java.lang.RuntimeException: Unable to start activity ComponentInfo{androidapps.viewpagerdemo/androidapps.viewpagerdemo.MainActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class android.support.v4.app.ViewPager
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.os.Looper.loop(Looper.java:137)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.app.ActivityThread.main(ActivityThread.java:4745)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at java.lang.reflect.Method.invokeNative(Native Method)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at java.lang.reflect.Method.invoke(Method.java:511)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at dalvik.system.NativeStart.main(Native Method)
03-25 17:12:13.166: E/AndroidRuntime(19449): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class android.support.v4.app.ViewPager
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:698)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.app.Activity.setContentView(Activity.java:1867)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at androidapps.viewpagerdemo.MainActivity.onCreate(MainActivity.java:14)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.app.Activity.performCreate(Activity.java:5008)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
03-25 17:12:13.166: E/AndroidRuntime(19449):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
03-25 17:12:13.166: E/AndroidRuntime(19449):    ... 11 more

I tried out the solution in this link but it didn't work for me. Error inflating class android.support.v4.view.ViewPager

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<android.support.v4.app.ViewPager 
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

</RelativeLayout>

The layout file of the fragment consists of simply one TextView. The fragment class is as follows:

public class MyFragment extends Fragment{
int mCurrentPage;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /** Getting the arguments to the Bundle object */
    Bundle data = getArguments();

    /** Getting integer data of the key current_page from the bundle */
    mCurrentPage = data.getInt("current_page", 0);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.frag_layout, container,false);
    TextView tv = (TextView ) v.findViewById(R.id.tv);
    tv.setText("You are viewing the page #" + mCurrentPage + "\n\n" + "Swipe Horizontally left / right");
    return v;
}
}

The FragmentPagerAdapter class:

public class MyAdapter extends FragmentPagerAdapter{

final int PAGE_COUNT = 3;
public MyAdapter(FragmentManager fm) {
    super(fm);
    // TODO Auto-generated constructor stub
}

@Override
public Fragment getItem(int arg0) {
    // TODO Auto-generated method stub
    MyFragment myFragment = new MyFragment();
    Bundle data = new Bundle();
    data.putInt("current_page", arg0+1);
    myFragment.setArguments(data);
    return myFragment;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return PAGE_COUNT;
}
}

the main activity:

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ViewPager pager = (ViewPager) findViewById(R.id.pager);

    /** Instantiating FragmentPagerAdapter */
    MyAdapter pagerAdapter = new MyAdapter(getSupportFragmentManager());

    /** Setting the pagerAdapter to the pager object */
    pager.setAdapter(pagerAdapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}
Community
  • 1
  • 1
Poonam Anthony
  • 1,848
  • 3
  • 17
  • 27
  • the android-support-v4.jar is present in the libs folder of my project and I have also added it to the build path. – Poonam Anthony Mar 25 '13 at 11:58
  • put your xml & code here. before that just check all jar in build path. if still get error then post code.. – Dhaval Parmar Mar 25 '13 at 12:02
  • okay guys i have posted the relevant xml files and classes. – Poonam Anthony Mar 25 '13 at 12:04
  • and i have been referring to this article http://wptrafficanalyzer.in/blog/implementing-horizontal-view-swiping-using-viewpager-and-fragmentpageradapter-in-android/ – Poonam Anthony Mar 25 '13 at 12:06
  • which version of support library your using.and post the fragmentActivity code where your adding fragments in viewpager.my suggestion is try to add the support library from right click on your project ->AndroidTools->Add Support Library . – Abhijit Chakra Mar 25 '13 at 12:07
  • Hey Girl i have tried your code its perfectly working add your latest support library as i told you before.because your support library is outdated for ViewPager. – Abhijit Chakra Mar 25 '13 at 12:21
  • @Abhijit you are probably right.I'm downloading the latest update of android sdk tools.i'll try to run the code once again after adding the latest support library to it. – Poonam Anthony Mar 25 '13 at 12:43
  • @Abhijit I'm using android support library version 12. still isnt working. – Poonam Anthony Mar 25 '13 at 12:46
  • Its working in my machine i am using library version 13 – Abhijit Chakra Mar 25 '13 at 13:06
  • ok so i deleted my entire project and recreated it once again. And somehow its functioning properly now...phew! – Poonam Anthony Mar 26 '13 at 08:42

1 Answers1

4

Hi i have just made some change in your layout file & its working fine now..

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp" >

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</RelativeLayout>

you can check this:

enter image description here

below code is just for your refrance---->

your main activity:

package com.example.viewpage;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;

public class MainActivity extends FragmentActivity {

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

        ViewPager pager = (ViewPager) findViewById(R.id.pager);

        /** Instantiating FragmentPagerAdapter */
        MyAdapter pagerAdapter = new MyAdapter(getSupportFragmentManager());

        /** Setting the pagerAdapter to the pager object */
        pager.setAdapter(pagerAdapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

MyAdapter:

package com.example.viewpage;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;

public class MyAdapter extends android.support.v4.app.FragmentPagerAdapter {

    final int PAGE_COUNT = 3;

    public MyAdapter(FragmentManager fm) {
        super(fm);
        // TODO Auto-generated constructor stub
    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub
        MyFragment myFragment = new MyFragment();
        Bundle data = new Bundle();
        data.putInt("current_page", arg0 + 1);
        myFragment.setArguments(data);
        return myFragment;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return PAGE_COUNT;
    }

}

MyFragment:

package com.example.viewpage;

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

public class MyFragment extends Fragment {

    private int mCurrentPage;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /** Getting the arguments to the Bundle object */
        Bundle data = getArguments();

        /** Getting integer data of the key current_page from the bundle */
        mCurrentPage = data.getInt("current_page", 0);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.frag_layout, container, false);
        TextView tv = (TextView) v.findViewById(R.id.textView1);
        tv.setText("You are viewing the page #" + mCurrentPage + "\n\n"
                + "Swipe Horizontally left / right");
        return v;
    }
}

frag_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

NOTE: add support android-support-v4.jar in lib folder. add this jar in Build Path. now go to project property-->Build Path--> Order & Export--> select all --> ok. Clean & RUN.

Dhaval Parmar
  • 18,812
  • 8
  • 82
  • 177
  • thanks for your answer.i tried it out but still getting the same error – Poonam Anthony Mar 25 '13 at 12:50
  • check my note in answer do that. you have used android-support-v4.jar?? replace MyAdapter class from my answer... still you don't get then just copy & past my all code in to your codd.. – Dhaval Parmar Mar 25 '13 at 12:52
  • yeah i did what you mentioned in your note. I replaced MyAdapter class with your code, no change. I'm not able to put my finger on the exact problem. I dont know if copy pasting your entire code will make any difference – Poonam Anthony Mar 25 '13 at 12:58
  • yes it make diffrence.. becoz our imports are may diffrent. for all class. – Dhaval Parmar Mar 25 '13 at 13:01