[英]SwipeRefreshLayout setRefreshing not showing progress bar in Fragment
I am using the following code in this fragment:我在这个片段中使用了以下代码:
public class OwnerPendingBookingsFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
private View myView;
private ListView booking_list;
private ArrayAdapter adapter;
private SharedPreferences preferences;
private BookingList bookings;
private SwipeRefreshLayout swipe;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
myView = inflater.inflate(R.layout.owner_pending_bookings_layout, container, false);
swipe = (SwipeRefreshLayout) myView.findViewById(R.id.swipe);
swipe.setOnRefreshListener(this);
swipe.post(new Runnable() {
@Override
public void run() {
swipe.setRefreshing(true);
new FindBookings().execute("");
}
}
);
return myView;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
private void setUpAdapter(){
booking_list = (ListView) myView.findViewById(R.id.pending_bookings);
if(bookings.getBookings().size() == 0){
booking_list.setVisibility(View.GONE);
LinearLayout no_vehicles = (LinearLayout) myView.findViewById(R.id.no_bookings_layout);
no_vehicles.setVisibility(View.VISIBLE);
}else {
new setImageTask().execute("");
adapter = new OwnerPendingBookingsAdapter(myView.getContext(), bookings.getBookings());
booking_list.setAdapter(adapter);
booking_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int booking_line = bookings.getBookings().get(position).getBooking_line_id();
Fragment booking_info = new OwnerPendingBookingInfoFragment();
Bundle args = new Bundle();
args.putInt("bookingLine", booking_line);
booking_info.setArguments(args);
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content_frame, booking_info);
transaction.addToBackStack(null);
transaction.commit();
}
});
booking_list.setVisibility(View.VISIBLE);
}
//LinearLayout progressBar = (LinearLayout) myView.findViewById(R.id.loadingPanel);
//progressBar.setVisibility(View.GONE);
}
@Override
public void onRefresh() {
swipe.setRefreshing(true);
new FindBookings().execute("");
}
private class FindBookings extends AsyncTask<String, Void, String> {
String token = preferences.getString(Config.TOKEN, "");
public FindBookings() {
}
@Override
protected void onPreExecute() {
swipe.setRefreshing(true);
}
@Override
protected void onPostExecute(String s){
setUpAdapter();
swipe.setRefreshing(false);
}
@Override
protected String doInBackground(String... params) {
bookings = DBConnect.getInfo();
return "done";
}
}
And I have the following layout:我有以下布局:
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipe"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/pending_bookings"
android:layout_gravity="center_horizontal"
android:divider="@null"
android:visibility="gone"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/no_bookings_layout">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/no_vehicles"
android:textSize="25dp"
android:textAlignment="center"
/>
</LinearLayout>
The first time it starts, it make it correctly I see the progress rolling until it finishes the proccess.它第一次启动时,它正确地我看到进度滚动,直到它完成过程。 But then everytime I swipe down it starts updating but I don't see the progress bar.但是每次我向下滑动它都会开始更新,但我看不到进度条。
I check SwipeRefreshLayout setRefreshing() not showing indicator initially and Android ProgressBar styled like progress view in SwipeRefreshLayout but none of this answers worked for me.我检查了SwipeRefreshLayout setRefreshing() 最初没有显示指示器, Android ProgressBar 样式类似于 SwipeRefreshLayout 中的进度视图,但这些答案都不适合我。
If you want to be able to pull refresh the empty view you'll have to put the FrameLayout
(that includes the ListView
and the EmptyView) inside the SwipeRefreshLayout
.如果您希望能够刷新空视图,则必须将FrameLayout
(包括ListView
和 EmptyView)放在SwipeRefreshLayout
。 Also, set android:clickable="true"
in the FrameLayout另外,在 FrameLayout 中设置android:clickable="true"
try this code:试试这个代码:
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipe"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/pending_bookings"
android:layout_gravity="center_horizontal"
android:divider="@null"
android:visibility="gone"/>
<TextView
android:id="@+id/no_bookings_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/no_vehicles"
android:textSize="25dp"
android:textAlignment="center"/>
</FrameLayout>
EDIT编辑
In case you have problem in scrolling up your list.如果您在向上滚动列表时遇到问题。 That everytime you scroll up in that view SwipeRefreshLayout fires and updates, making your app unable to scroll up in a list.每次您在该视图中向上滚动时 SwipeRefreshLayout 都会触发和更新,从而使您的应用无法在列表中向上滚动。 Add this code in your Activity or fragment:在您的活动或片段中添加此代码:
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
int topRowVerticalPosition = (listView == null ||
listView.getChildCount() == 0) ? 0 : listView.getChildAt(0).getTop();
swipeRefreshLayout.setEnabled(firstVisibleItem == 0 && topRowVerticalPosition >= 0);
}
});
credit to this post by Nacho Lopez归功于Nacho Lopez 的这篇文章
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipe"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/pending_bookings"
android:layout_gravity="center_horizontal"
android:divider="@null"
android:visibility="gone"/>
<TextView
android:id="@+id/no_bookings_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/no_vehicles"
android:textSize="25dp"
android:textAlignment="center"/>
</FrameLayout>
It is really worked and there is nothing to be changed in Main Activity just add this framelayout and I used webview and progressbar, works fine...它真的很有效,在主活动中没有什么可以改变的,只需添加这个框架布局,我使用 webview 和进度条,工作正常......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.