2017-11-30 10 views
-1

mysqliデータベースからボレーの文字列リクエストを通じてアンドロイドリサイクルビューにデータを取得しています。手動リフレッシュをせずにアイテムが追加されたときに、リサイクラビューをリフレッシュする必要があります。 notifyDataSetChangedをメインアクティビティのcreateメソッドに追加しましたが、アイテムが追加されると、リサイクラビューは更新されません。以下は私のコードです:リサイクラービューの更新が機能しない

public class MainActivity extends AppCompactActivity { 
     RecyclerView recyclerView; 
     RecyclerLayout adapter; 
     List <Recycler> arrayList; 
     private static final String url = "http://example.com"; 

    @Override 
    //overriding the onCreate method from its super class 
    { 
     recyclerView = findViewById (R.id.recycler); 
     arrayList = new ArrayList <>(); 
     retrieveData(); 

     recyclerView.setHasFixedSize (true); 
     recyclerView.setLayoutManager (new LinearLayoutManager (this)); 
     adapter = new adapter(getApplicationContext()); 
     recyclerView.setAdapter (adapter); 
     adapter.notifyDataSetChanged(); 
     } 

     private void retrieveData(){ 
      StringRequest stringRequest = new StingRequest(Request.Method.POST, url, 
      new Response.Listener <String>(); 
      @Override 
      public void onResponseListener (response){ 

      //surround jsonArray with try and catch 
       JsonArray array = new JsonArray (response); 

       for (int i = o; i < array.length(); i++){ 
        JsonObject object = array.getJsonObject(i) ; 
        arrayList.add (new Recycler (
         object.getString ("text"))) 
       } 
      }, 
      new Response.ErrorListener <>() 
      /**overriding the error listener method**/); 
      //adding the volley request on a queue 
     } 
    } 


    //Recycler adapter class 

    public class RecyclerLayout extends RecyclerView.adapter <RecyclerLayout.RecyclerHolder>{ 
      Context ctx; 
      List <Recycler> arrayList; 
     RecyclerLayout(Context ctx, List <Recycler> arrayList){ 
       this.ctx=ctx; 
       this.arrayList = arrayList; 
      } 
      @Override 
      //creating the view 

      @Override 
      //implementing the onBind method 

      @Override 
      //implementing the getItemCount method 
     RecyclerHolder extends RecyclerView.ViewHolder { 
     } 
    } 


    //Recycler j son store 
    public class Recycler { 
      private String text; 
     Recycler (String text){ 
      this.text = text; 
     } 
     public String getText(){ 
      return text; 
     } 
    } 

答えて

0

項目が検索され、配列に追加された後、あなたはnotifyDataSetChangedを呼び出す必要があります。 setAdapterの後にnotifyDataSetChangedを呼び出すのは無意味です。この時点では、アダプタは更新する必要がないからです。

adapter = new RecyclerLayout(getApplicationContext(),arrayList); 
recyclerView.setAdapter (adapter); 
0

変更コードはあなたにエラーを与える必要があります。コードを以下のように変更する必要があります。 onCreate()で:

recyclerView = findViewById (R.id.recycler); 
arrayList = new ArrayList <>(); 
recyclerView.setHasFixedSize (true); 
recyclerView.setLayoutManager (new LinearLayoutManager (this)); 
adapter = new adapter(getApplicationContext(), arrayList); 
recyclerView.setAdapter (adapter); 

retriveData()方法において:

public void onResponseListener (response){ 

     //surround jsonArray with try and catch 
      JsonArray array = new JsonArray (response); 

     for (int i = o; i < array.length(); i++){ 
       JsonObject object = array.getJsonObject(i) ; 
       arrayList.add (new Recycler (
        object.getString ("text"))) 
     } 

     adapter.notifyDataSetChanged(); 
} 
0

あなたの現在のコードに

adapter = new adapter(getApplicationContext()) 
recyclerView.setAdapter (adapter); 
adapter.notifyDataSetChanged(); 

から

関連する問題