2016-05-12 8 views
0

ich in diesem Fragmente des folgenden Code verwenden:SwipeRefreshLayout setRefreshing nicht zeigt Fortschrittsbalken in Fragmente

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"; 
    } 
} 

Und ich habe folgendes 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> 

Das erste Mal startet, es macht es richtig Ich sehe den Fortschritt rollt, bis es den Prozess beendet. Aber jedes Mal, wenn ich nach unten wische, wird die Aktualisierung gestartet, aber ich sehe den Fortschrittsbalken nicht.

Ich überprüfe SwipeRefreshLayout setRefreshing() not showing indicator initially und Android ProgressBar styled like progress view in SwipeRefreshLayout aber keine dieser Antworten funktionierte für mich.

Antwort

2

Wenn Sie den leeren Blick zu ziehen in der Lage sein wollen, aktualisieren Sie werden Sie die FrameLayout setzen müssen (das das ListView und die EmptyView) innerhalb des SwipeRefreshLayout. Auch setzen android:clickable="true" im FrameLayout

versuchen diesen 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> 

Kredit antoinem

EDIT

Falls Sie haben Problem in Scrollen nach oben Ihre Liste. Jedes Mal, wenn Sie in dieser Ansicht nach oben scrollen, wird SwipeRefreshLayout ausgelöst und aktualisiert, sodass Ihre App nicht in einer Liste nach oben scrollen kann. Fügen Sie diesen Code in Ihre Aktivität oder ein 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); 
     } 
    }); 

Kredit this post by Nacho Lopez

+0

funktioniert wie Charme ... !!! thnks @ mgcaguioa – Rumit

Verwandte Themen