Android RecyclerView адаптер не инициализировать

Сначала извините за мой бедный английский.
Я работаю с Android RecyclerView. Из моего действия отправить запрос на сервер для данных и получить ответ от сервера путем вызова Sendrequestforhistory() метод в метод onCreate. После вызова sendRequestForHistory () инициализируйте мой адаптер данных, но здесь мой ArrayList пуст. В методе sendRequestForHistory () получить данные с сервера и добавить в ArrayList. Мой код такой.

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]);

  }
}

1 ответ

  1. Я надеюсь, что это поможет вам, вы делаете Интернет-звонок, поэтому, когда ответ получает, то вы можете добавить

    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();
            }
        });
    }
    

    Это ваш класс адаптера, пожалуйста, добавьте функцию» добавление » внутри адаптера не внешняя причина это сделает ваш код выглядеть более ужасно и сложно.

    public class HistoryAdapter{
    
    
    private ArrayList<Article> articleList;
    
    public HistoryAdapter(......){
       articleList = new ArrayList<>();
       .....
    }
    
    .....
    
    .....
    
    
    public void addItem(Article article){
        articleList.add(article);
        notifyDataSetChanged();
    }
    }