简体   繁体   English

SwipeRefreshLayout setRefreshing 未在 Fragment 中显示进度条

[英]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>

credit to antoinem归功于对映体

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.

相关问题 SwipeRefreshLayout setRefreshing()最初没有显示指标 - SwipeRefreshLayout setRefreshing() not showing indicator initially 在片段事务期间在 swipeRefreshLayout 上设置刷新(false)时,Android 片段两次 - Android fragment twice when setRefreshing(false) on swipeRefreshLayout during fragment transaction SwipeRefreshLayout最初不显示颜色,仅在调用.setRefreshing(false)时显示 - SwipeRefreshLayout not showing colors at first and only shows when .setRefreshing(false) called 在viewpager中的setRefreshing(false)之后,SwiperefreshLayout指示器是否继续显示? - SwiperefreshLayout indicator continue showing after setRefreshing(false) inside viewpager? 进度条未显示在片段[ANDROID]中 - Progress Bar not showing in fragment [ANDROID] Fragment上的Circle Progress Bar未显示进度 - Circle Progress Bar on Fragment is not showing progress 在SwipeRefreshLayout上使用setRefreshing(boolean)时偶尔获得NullPointerExceptions - Getting occasional NullPointerExceptions when setRefreshing(boolean) on SwipeRefreshLayout SwipeRefreshLayout 使用进度条向下滑动滚动视图 - SwipeRefreshLayout swipe down scrollview with progress bar Recyclerview片段中的屏幕旋转后进度条不显示 - progress bar not showing after screen rotation in recyclerview fragment Reandroid 为什么进度条加载不显示片段 android 中的实际数据? - why progress bar loading not showing actual data in fragment android?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM