2016-10-06 25 views
0

最初は貧しい私の英語を申し訳ありません。 私はAndroid RecyclerViewで動作しています。私のアクティビティから、データのリクエストをサーバーに送信し、onCreateメソッドのsendRequestForHistory()メソッドを呼び出すことによって、サーバーからレスポンスを取得します。 sendRequestForHistory()を呼び出してからデータアダプタを初期化しますが、ここではArrayListは空です。 sendRequestForHistory()メソッドでは、サーバからデータを取得し、ArrayListに追加します。このような私のコード。Android RecyclerViewアダプタが初期化されていません

public class HistoryActivity extends AppCompatActivity { 
private Toolbar toolbar; 
private ProgressDialog PD; 
private RecyclerView recyclerView; 
private HistoryAdapter historyAdapter; 
private Boolean isInternetPresent = false; 
private ConnectionDetector cd; 
private TextView tvEmptyView; 
private ArrayList<ItemHistory> itemHistories; 
protected Handler handler; 
private LinearLayoutManager linearLayoutManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_history); 
    dbHelper= new DatabaseHelper(this); 
    handler = new Handler(); 
    itemHistories = new ArrayList<ItemHistory>(); 

    toolbar = (Toolbar) findViewById(R.id.tool_bar); 
    toolbar.setTitle(brandName); 
    setSupportActionBar(toolbar); 

    PD = new ProgressDialog(this); 
    PD.setMessage("Loading....."); 
    PD.setCancelable(false); 
    recyclerView = (RecyclerView)findViewById(R.id.recycler_view_history); 
    recyclerView.setHasFixedSize(true); 
    linearLayoutManager = new LinearLayoutManager(this); 
    recyclerView.setLayoutManager(linearLayoutManager); 

    sendRequestForHistory(); 

    // Here itemHistories is empty. 
    historyAdapter = new HistoryAdapter(itemHistories, recyclerView); 
    recyclerView.setAdapter(historyAdapter); 
    historyAdapter.notifyDataSetChanged(); 
    } 

private void sendRequestForHistory() { 
//send request to server and get response history data 
// then history dada add to itemHistories ArrayList 

itemHistories.add(new ItemHistory(requestReceiver[i], requestAmount[i],requestCost[i]); 

    } 
} 
+0

アダプタコードを表示できますか? –

+0

@ Matthew Shearer、ありがとうアダプタークラスは大丈夫だと思います。私は 'historyAdapter = new HistoryAdapter(itemHistories、recyclerView);を使用します。 recyclerView.setAdapter(historyAdapter); historyAdapter.notifyDataSetChanged(); 'sendRequestForHistory()でうまく動作します。 – crazyCoder

+0

sendRequestForHistory()は何とか新しいスレッドを作成しますか?もしそうなら、アダプターの設定はこれが完了するまで待つ必要があります。 –

答えて

0

私はあなたがあなたのアダプター内の機能を「追加」ではない追加してください応答を受信して​​いるとき、あなたは

private void sendRequestForHistory() { 
    ApiClient.getArticles(page, category_name, type).enqueue(new Callback<List<Article>>() { 
     @Override 
     public void onResponse(Call<List<Article>> call, Response<List<Article>> response) { 
      if(response.isSuccessfull()){ 
       for(Article article: response.body().getList()){ 
        historyAdapter.addItem(article); 
       } 
      }else{ 
       Toast.makeText(getContext(),response.message(),Toast.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onFailure(Call<List<Article>> call, final Throwable t) { 
      Toast.makeText(getContext,t.getMessage(),Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

このアダプタクラスを追加することができますなぜインターネット通話がthatsの作っている、これはあなたを助けることを願っています外側の原因は、コードがよりひどく複雑に見えるようにします。

public class HistoryAdapter{ 


private ArrayList<Article> articleList; 

public HistoryAdapter(......){ 
    articleList = new ArrayList<>(); 
    ..... 
} 

..... 

..... 


public void addItem(Article article){ 
    articleList.add(article); 
    notifyDataSetChanged(); 
} 
} 
関連する問題