2016-06-09 18 views
0

Ich versuche, Daten für recyclerView für den folgenden Code neu zu laden. aber es funktioniert nicht mit richtig zum Beispiel arbeiten:Android Updade RecyclerView Daten

realm = Realm.getDefaultInstance(); 
long count = Utils.getLocalContactsList(getContentResolver(), realm); 
if (count > 0) { 
    results = realm.where(ContactLists.class).findAll(); 
    recyclerView = (RecyclerView) findViewById(R.id.rcontactLists); 
    adapter = new ContactsAdapter(results, getApplication()); 
    recyclerView.setAdapter(adapter); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
}else{ 
    Utils.toast(Utils.getString(R.string.there_is_no_contacts), getBaseContext()); 
} 

ich kann füllen recyclerView und dass die Arbeit in Ordnung, aber nach ein paar Daten von Webservice und Update-Datenbank holen i recyclerView neu geladen werden müssen, aber dieser Teil meines Codes nicht funktionieren :

JsonArrayRequest req = new JsonArrayRequest(fetch_server_url, new JSONArray(wordList), 
     new Response.Listener<JSONArray>() { 
      @Override 
      public void onResponse(JSONArray response) { 
       for (int i = 0; i < response.length(); i++) { 
        try { 
         JSONObject jsonObject = response.getJSONObject(i); 
         String  mobileNumber = jsonObject.getString("mobileNumber"); 
         ContactLists exists_row = realm.where(ContactLists.class).equalTo("mobile_number", mobileNumber).findFirst(); 
         realm.beginTransaction(); 
         if (exists_row != null) { 
          exists_row.setIsRegistered("1"); 
         } else { 
          exists_row.setIsRegistered("0"); 
         } 
         realm.commitTransaction(); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
       results = realm.where(ContactLists.class).findAll(); 
       adapter.notifyDataSetChanged(); 
       progressDialog.dismiss(); 
      } 
     }, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     //Log.e 
    } 
}); 

Problem ist, diese Zeilen:

results = realm.where(ContactLists.class).findAll(); 
adapter.notifyDataSetChanged(); 

Mein recyclerView Adapter:

public class ContactsAdapter extends RecyclerView.Adapter<CustomContactsViewHolder> { 

    List<ContactLists> list = Collections.emptyList(); 
    Context context; 

    public ContactsAdapter(List<ContactLists> list, Context context) { 
     this.list = list; 
     this.context = context; 
    } 

    @Override 
    public CustomContactsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View      v  = LayoutInflater.from(parent.getContext()).inflate(R.layout.contact_item, parent, false); 
     CustomContactsViewHolder holder = new CustomContactsViewHolder(v); 
     return holder; 
    } 

    @Override 
    public void onBindViewHolder(CustomContactsViewHolder holder, int position) { 
     holder.title.setText(list.get(position).getContact_name()); 
     holder.description.setText(list.get(position).getMobile_number()); 
     if (list.get(position).getIsRegistered().equals("1")) 
      holder.img_logo.setImageDrawable(context.getResources().getDrawable(R.drawable.epay_logo)); 
     else 
      holder.img_logo.setVisibility(View.INVISIBLE); 
    } 

    @Override 
    public int getItemCount() { 
     return list.size(); 
    } 

    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 
} 

Antwort

1

Sieht so aus, als müssten Sie den Adapter mit den neuen Daten aktualisieren.

results = realm.where(ContactLists.class).findAll(); 
adapter.setData(results); 
adapter.notifyDataSetChanged(); 

Wo setData tut:

public void setData(List<ContactLists> list) { 
     this.list = list; 
}