14

Im trying to implement SwipeRefreshLayout on a Fragment.

I already solved it to implement it on an Activity, but when I implement it on Fragment: java.lang.NoClassDefFoundError: com...

Does anyone has an idea? Thanks!

Similar post without answers/solution: Swipe Refresh Layout - Class not found

My code:

public class Principal extends Fragment implements OnRefreshListener {
    SwipeRefreshLayout swipeLayout;

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

        // Inflate the layout for this fragment
        view = inflater.inflate(R.layout.principal, container, false);

        swipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container);
        swipeLayout.setOnRefreshListener(this);
        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);

        return view;
    }
}

And my layout:

<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.enhancedListView.EnhancedListView
        android:id="@+id/listaNoticias"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="6dp"
        android:layout_marginRight="6dp"
        android:layout_marginTop="5dp" >
    </com.enhancedListView.EnhancedListView>

</android.support.v4.widget.SwipeRefreshLayout>

Full stack trace

08-13 11:36:19.292: E/AndroidRuntime(31572): FATAL EXCEPTION: main
08-13 11:36:19.292: E/AndroidRuntime(31572): Process: com.xxx.xx, PID: 31572
08-13 11:36:19.292: E/AndroidRuntime(31572): java.lang.NoClassDefFoundError: com.xxx.fragments.Principal
08-13 11:36:19.292: E/AndroidRuntime(31572):    at com.xxx.hem.activities.MainActivity.CargarPrincipal(MainActivity.java:676)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at com.xxx.hem.activities.MainActivity.onCreate(MainActivity.java:297)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at android.app.Activity.performCreate(Activity.java:5231)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at android.app.ActivityThread.access$800(ActivityThread.java:135)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at android.os.Handler.dispatchMessage(Handler.java:102)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at android.os.Looper.loop(Looper.java:136)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at android.app.ActivityThread.main(ActivityThread.java:5001)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at java.lang.reflect.Method.invoke(Native Method)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
08-13 11:36:19.292: E/AndroidRuntime(31572):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
Sufian
  • 6,405
  • 16
  • 66
  • 120
Nacho
  • 2,057
  • 2
  • 23
  • 32

3 Answers3

22

Solved it :)

My XML

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

    <com.enhancedListView.EnhancedListView
        android:id="@+id/listaNoticias"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="6dp"
        android:layout_marginRight="6dp"
        android:layout_marginTop="5dp" >
    </com.enhancedListView.EnhancedListView>

</android.support.v4.widget.SwipeRefreshLayout>

My Fragment

public class Principal extends Fragment implements OnRefreshListener {
SwipeRefreshLayout swipeLayout;

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

    // Inflate the layout for this fragment
    view = inflater.inflate(R.layout.principal, container, false);

    swipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container);
    swipeLayout.setOnRefreshListener(this);
    swipeLayout.setColorSchemeColors(android.R.color.holo_green_dark, 
            android.R.color.holo_red_dark, 
            android.R.color.holo_blue_dark, 
            android.R.color.holo_orange_dark); (...)

@Override
public void onRefresh() {
    new myTask().execute();     
}
Saurabh
  • 449
  • 4
  • 9
Nacho
  • 2,057
  • 2
  • 23
  • 32
2

Put your swipeLayout initialization in onViewCreated(View view, Bundle bundle) instead of onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {

        swipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container);
        swipeLayout.setOnRefreshListener(this);
        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);
}
esilver
  • 27,713
  • 23
  • 122
  • 168
0

Just be sure that you put the code for swipe refresh layout in override fun onViewCreated(view: View, savedInstanceState: Bundle?) {} instead of onCreateView.

Sandip Fichadiya
  • 3,430
  • 2
  • 21
  • 47