I keep getting this error and it's causing my app to crash. Trying to implement the new v4 swipe refresh layout. I have updated the support library + sdk. What is the issue?
Could not find class 'android.support.v4.widget.SwipeRefreshLayout', referenced from method ......onCreate
import android.support.v4.widget.SwipeRefreshLayout;
...
private SwipeRefreshLayout swipeLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home_page_list);
swipeLayout = (SwipeRefreshLayout) findViewById(R.id.container);
swipeLayout.setColorScheme(android.R.color.holo_blue_bright,
android.R.color.holo_green_light,
android.R.color.holo_orange_light,
android.R.color.holo_red_light);
swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swipeLayout.setRefreshing(false);
}
});
XML
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.devrim.ythaber.HomeActivity"
tools:ignore="MergeRootFrame" >
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/thumb"
android:layout_width="100dp"
android:layout_height="100dp"
android:contentDescription="@string/app_name" />
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="wrap_content"
android:layout_height="290dp"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:orientation="vertical" >
<!-- android:layout_toRightOf="@+id/thumb" -->
</RelativeLayout>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:ellipsize="end"
android:fontFamily="sans-serif-light"
android:maxLines="2"
android:shadowColor="@color/dropshadow"
android:shadowDx="2"
android:shadowDy="2"
android:shadowRadius="2"
android:text="@string/title"
android:textAllCaps="false"
android:textAppearance="?android:attr/textAppearanceSmallPopupMenu"
android:textColor="@color/titlecolour"
android:textSize="35sp"
android:textStyle="italic"
android:typeface="sans" >
</TextView>
<TextView
android:id="@+id/category"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/title"
android:ellipsize="end"
android:fontFamily="sans-serif-light"
android:gravity="right"
android:maxLines="1"
android:paddingRight="5dp"
android:paddingTop="10dp"
android:textAppearance="?android:attr/textAppearanceSmallPopupMenu"
android:textColor="@color/catcolour"
android:textSize="17sp"
android:textStyle="italic"
android:typeface="sans" >
</TextView>
</LinearLayout>
</ScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
Complete logcat:
05-01 21:31:27.390: W/dalvikvm(11452): VFY: unable to find class referenced in signature (Landroid/support/v4/widget/SwipeRefreshLayout;)
05-01 21:31:27.390: E/dalvikvm(11452): Could not find class 'android.support.v4.widget.SwipeRefreshLayout', referenced from method com.devrim.ythaber.HomeActivity.onCreate
05-01 21:31:27.390: W/dalvikvm(11452): VFY: unable to resolve check-cast 619 (Landroid/support/v4/widget/SwipeRefreshLayout;) in Lcom/devrim/ythaber/HomeActivity;
05-01 21:31:27.390: W/dalvikvm(11452): Link of class 'Lcom/devrim/ythaber/HomeActivity$1;' failed
05-01 21:31:27.440: W/dalvikvm(11452): threadid=1: thread exiting with uncaught exception (group=0x4166ee18)
05-01 21:31:27.440: E/AndroidRuntime(11452): FATAL EXCEPTION: main
05-01 21:31:27.440: E/AndroidRuntime(11452): Process: com.devrim.ythaber, PID: 11452
05-01 21:31:27.440: E/AndroidRuntime(11452): java.lang.NoClassDefFoundError: android.support.v4.widget.SwipeRefreshLayout
05-01 21:31:27.440: E/AndroidRuntime(11452): at com.devrim.ythaber.HomeActivity.onCreate(HomeActivity.java:56)
05-01 21:31:27.440: E/AndroidRuntime(11452): at android.app.Activity.performCreate(Activity.java:5312)
05-01 21:31:27.440: E/AndroidRuntime(11452): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
05-01 21:31:27.440: E/AndroidRuntime(11452): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2552)
05-01 21:31:27.440: E/AndroidRuntime(11452): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2653)
05-01 21:31:27.440: E/AndroidRuntime(11452): at android.app.ActivityThread.access$800(ActivityThread.java:156)
05-01 21:31:27.440: E/AndroidRuntime(11452): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
05-01 21:31:27.440: E/AndroidRuntime(11452): at android.os.Handler.dispatchMessage(Handler.java:102)
05-01 21:31:27.440: E/AndroidRuntime(11452): at android.os.Looper.loop(Looper.java:157)
05-01 21:31:27.440: E/AndroidRuntime(11452): at android.app.ActivityThread.main(ActivityThread.java:5872)
05-01 21:31:27.440: E/AndroidRuntime(11452): at java.lang.reflect.Method.invokeNative(Native Method)
05-01 21:31:27.440: E/AndroidRuntime(11452): at java.lang.reflect.Method.invoke(Method.java:515)
05-01 21:31:27.440: E/AndroidRuntime(11452): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1069)
05-01 21:31:27.440: E/AndroidRuntime(11452): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
Android SwipeRefreshLayout is a ViewGroup that can hold only one scrollable child. It can be either a ScrollView, ListView or RecyclerView. The basic need for a SwipeRefreshLayout is to allow the users to refresh the screen manually.
Add the SwipeRefreshLayout Widget To add the swipe to refresh widget to an existing app, add SwipeRefreshLayout as the parent of a single ListView or GridView . Remember that SwipeRefreshLayout only supports a single ListView or GridView child. You can also use the SwipeRefreshLayout widget with a ListFragment .
The way to achieve that is by using setColorScheme in the Swipe Refresh object. It allows you to set 4 colors.
If you are using graddle, you may want to check that you updated your configuration to use the 19.1 version of the android support library. See following line:
dependencies {
compile 'com.android.support:support-v4:19.1.+'
}
For me, the problem was that one of my library projects was using v13 of the support library: android-support-v13.jar
.
So look out for a message like this in your logs:
Found both android-support-v4 and android-support-v13 in the dependency list.
Because v13 includes v4, using only v13.
If you see that warning, make sure your library project also includes the latest support library, otherwise your v4 library might get superseded by an old v13 library (which obviously does not include the new SwipeRefreshLayout
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With