我试图在片段上实现SwipeRefreshLayout。
我已经解决了它在Activity上实现它,但是当我在Fragment上实现它时:java.lang.NoClassDefFoundError:com ...
有没有人有想法?谢谢!
类似帖子没有答案/解决方案:Swipe Refresh Layout - Class not found
我的代码:
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;
}
}
我的布局:
<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>
完整堆栈跟踪
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)
答案 0 :(得分:19)
解决了它:)
我的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>
我的片段
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();
}
答案 1 :(得分:3)
将swipeLayout初始化放在onViewCreated(View视图,Bundle包)而不是onCreateView(LayoutInflater inflater,ViewGroup容器,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);
}
答案 2 :(得分:-1)
只需确保将刷卡刷新布局的代码放在override fun onViewCreated(view: View, savedInstanceState: Bundle?) {}
而不是onCreateView
中。