2016-07-04 14 views
2

SwipeRefresh funktioniert nicht in Fragment. Mein xml-Code:SwipeRefresh funktioniert nicht im Fragment?

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.SwipeRefreshLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/pagerefresh" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/progress" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:scrollbars="vertical" /></android.support.v4.widget.SwipeRefreshLayout> 

Mein Fragmnet Code:

View drawer = inflater.inflate(R.layout.fragment_progress, container, false); 

    swipeRefreshLayout = (SwipeRefreshLayout) drawer.findViewById(R.id.pagerefresh); 
    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      swipeRefreshLayout.setRefreshing(true); 
      getProgressData(); 
     } 
    }); 
    swipeRefreshLayout.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); adapter = new ProgressOrderListAdapter(orderLists, getActivity()); 
    recyclerView.setAdapter(adapter); 
    return recyclerView; 

getProgressData() Funktion & es für Sie

private void getProgressData(){ 
    String token = SharedPreferencesManager.readPreferenceString("token", "D/N"); 
    JSONObject progressData = new JSONObject(); 
    try{ 
     progressData.put("token", token); 
     JsonObjectRequest progressObject = new JsonObjectRequest(1, Common.OrderDetails + "progress", progressData, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject progressResponse) { 
       Log.d("Responseprogress", progressResponse.toString()); 
       try { 
        int status = progressResponse.getInt("status"); 
        if(status == 1) { 
         progressOrderProgress(progressResponse); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       error.printStackTrace(); 
       Log.d("Response", "PROGRESS ERROR"); 
      } 
     }); 
     progressObject.setShouldCache(false); 
     ServiceBellApp.getInstance().addToRequestQueue(progressObject); 
    } 
    catch (JSONException localJSONException){ 
     localJSONException.printStackTrace(); 
     return; 
    } 
} 

private void progressOrderProgress(JSONObject progressResponse) throws JSONException { 
    JSONArray result = progressResponse.getJSONArray("orderdata"); 
    for(int i=0; i<result.length(); i++){ 
     OrderList orderListModule = new OrderList(); 
     JSONObject orderData = null; 
     try { 
      orderData = result.getJSONObject(i); 
      orderListModule.setPackage_name(orderData.getString("name")); 
      orderListModule.setOrderdate(orderData.getString("date")); 
      orderListModule.setServicedate(orderData.getString("service")); 
      orderListModule.setServicetime(orderData.getString("time")); 
      orderListModule.setOrderid(orderData.getString("id")); 
      orderListModule.setOrdstatus(orderData.getString("status")); 
      orderListModule.setOrderamount(orderData.getInt("ramount")); 
     }catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     orderLists.add(orderListModule); 
    } 
    swipeRefreshLayout.setRefreshing(false); 
    adapter.notifyDataSetChanged(); 
} 

mehr hilfreich ist, ist dieser mein Code. Ich bekomme keinen Fehler in Logcat, aber es funktioniert nicht. Bitte helfen Sie mir Freunde

+0

Show 'getProgressData()' Funktion –

+0

Das ist meine JsonObjectRequest Funktion ist – vinoth12594

+0

zeigen, wie Sie Adapter setzen ..... Bitte zeigen Sie Ihren vollständigen Code. –

Antwort

4
mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swiperefresh); 
     mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       mArrayList = new ArrayList<CabsETA>(); 

       mSwipeRefreshLayout.post(new Runnable() { 
              @Override 
              public void run() { 
               mSwipeLayout = true; 

               mSwipeRefreshLayout.setRefreshing(true); 

               getNear(); 
              } 
             } 
       ); 

      } 
     }); 





public void getNear() { 

     latLongSevenKms(); 
     mSwipeRefreshLayout.setRefreshing(true); 
} 


<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/swiperefresh" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/topLayout"> 


     <android.support.v7.widget.RecyclerView 
      android:id="@+id/listView" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_alignParentBottom="true" 
      android:layout_gravity="start" 
      android:layout_marginTop="8dp" 
      android:background="#f5f5f5" 
      android:choiceMode="singleChoice" 
      android:divider="@null" 
      android:dividerHeight="0dp" /> 
    </android.support.v4.widget.SwipeRefreshLayout> 

Verwendung: LinearLayoutManager mm = new LinearLayoutManager (this, LinearLayoutManager.VERTICAL, false);

RecyclerView.setLayoutManager (mm);

+0

Not working.i legte Log.d ("refresh", "working"); in mSwipeRefreshLayout.post (new Runnable() {} kein Protokoll dispaly – vinoth12594

+0

Hast du-Layout auf RecyclerView? – androgo

+0

Bereits hinzugefügt ich mein Layout – vinoth12594

2

Verstehen Sie diesen grundlegenden Fluss, was in Ihrem Code zu sehen ist Sie haben alles getan, nur eine Sache ist verpasst.

Sie gemacht Anfrage neue Daten erhalten und es dann zu orderLists.add(orderListModule); hinzufügen und adapter.notifyDataSetChanged(); dann hier nennen, ist Ausgabe Sie hier festlegen, mit Ihrem neuen Datensatz adatpter statt notifyDataSetChanged() nennen sollte.

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    ... 
    listView.setAdapter(); 
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      refreshContent(); 
      ... 
    } 

    // fake a network operation's delayed response 
    // this is just for demonstration, not real code! 
    private void refreshContent(){ 
    new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
    mAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, getNewTweets()); 
    mListView.setAdapter(mAdapter); 
    mSwipeRefreshLayout.setRefreshing(false); 
    }); 
    } 

    // get new cat names. 
    // Normally this would be a call to a webservice using async task, 
    // or a database operation 

private List<String> getNewCatNames() { 
     List<String> newCatNames = new ArrayList<String>(); 
     for (int i = 0; i < mCatNames.size(); i++) { 
      int randomCatNameIndex = new Random().nextInt(mCatNames.size() - 1); 
      newCatNames.add(mCatNames.get(randomCatNameIndex)); 
     } 
     return newCatNames; 
    } 

Update: im Code

private void progressOrderProgress(JSONObject progressResponse) throws JSONException { 
    JSONArray result = progressResponse.getJSONArray("orderdata"); 
    for(int i=0; i<result.length(); i++){ 
     OrderList orderListModule = new OrderList(); 
     JSONObject orderData = null; 
     try { 
      orderData = result.getJSONObject(i); 
      orderListModule.setPackage_name(orderData.getString("name")); 
      orderListModule.setOrderdate(orderData.getString("date")); 
      orderListModule.setServicedate(orderData.getString("service")); 
      orderListModule.setServicetime(orderData.getString("time")); 
      orderListModule.setOrderid(orderData.getString("id")); 
      orderListModule.setOrdstatus(orderData.getString("status")); 
      orderListModule.setOrderamount(orderData.getInt("ramount")); 
     }catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     orderLists.add(orderListModule); 
    } 
    swipeRefreshLayout.setRefreshing(false); 
    adapter = new ProgressOrderListAdapter(orderLists, getActivity()); 
    recyclerView.setAdapter(adapter); 
} 

Full Demo Here.

+0

ich versuchte nicht funktioniert – vinoth12594

+0

Bereits ich recyclerView.setAdapter (Adapter) hinzugefügt, in onCreateView() -Funktion – vinoth12594

+0

Adapter = neuer Adapter (.....); recyclerView.setAdapter (Adapter), nachdem neue Werte –

Verwandte Themen