【发布时间】:2019-10-06 13:10:00
【问题描述】:
我在片段中的 SwipeRefreshLayout 中有一个 recyclerview。我已经实现了 AsyncTask 来获取 recyclerview 的数据。问题是 SwipeRefreshLayout 根本不显示,因此数据没有填充到 recyclerview 中。我为 Activity 做了同样的事情,它工作得很好,但不是片段。谁能指导我我做错了什么? 这是片段的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".FeatureFragment">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.recyclerview.widget.RecyclerView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>
这是我在片段类中所做的。
public class FeaturedFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
private RecyclerView mRecyclerView;
private SwipeRefreshLayout mSwipeLayout;
public FeaturedFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_featured_captions, container, false);
mRecyclerView = view.findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mSwipeLayout = view.findViewById(R.id.refresh_layout);
mSwipeLayout.setOnRefreshListener(this);
return view;
}
@Override
public void onRefresh() {
new FetchFeedTask().execute((Void) null);
}
private class FetchFeedTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
mSwipeLayout.setRefreshing(true);
}
@Override
protected Boolean doInBackground(Void... voids) {
//things to do in background
}
@Override
protected void onPostExecute(Boolean success) {
mSwipeLayout.setRefreshing(false);
mRecyclerView.setAdapter(/*adapter*/);
//things to do at the end
}
}
}
【问题讨论】:
-
添加
SwipeRefreshLayout作为根布局。 -
@MehulSolanki 我不想,因为我有一些视图要添加到 SwipeRefreshLayout 上方
-
你不能在滑动上方有东西来刷新布局,它需要是根。您可以在回收站视图上方放置“东西”,但不能在 swiperefresh 上方放置
-
@JoachimHaglund 这可能不是真的。我已经测试过了,你可以在 SwipeRefreshLayout 上方看到视图。
-
您可以尝试在您的
LinearLayout中添加android:clickable="true"。这可能会有所帮助
标签: android android-recyclerview android-asynctask swiperefreshlayout