JSONデータをRecyclerViewリストに表示しようとしていますが、呼び出すときはいつでもRecyclerViewが空になっているようです。私はconfigViews()メソッドの前にonCreateでAPIサービス/マネージャーを取得するように設定しました。私はあまりにも早く電話をしていますか?私は問題はコールの前にビュー/アダプタを作成することだと思ったが、それは違いを生み出すようではない。ビューを構成する前に非同期呼び出しを行うことはできますか?
これはレトロフィットの呼び出しのためのコードです:
listCall.enqueue(new Callback<List<Character>>() {
@Override
public void onResponse(Call<List<Character>> call, Response<List<Character>> response) {
if(response.isSuccessful()){
List<Character> characterList = response.body();
Log.v(TAG, response.toString());
for (int i = 0; i < characterList.size(); i++){
Character character = characterList.get(i);
character.setName(characterList.get(i).getName());
character.setDescription(characterList.get(i).getDescription());
characterAdapter.addCharacter(character);
}
configViews();
characterAdapter.notifyDataSetChanged();
}
else {
int sc = response.code();
}
}
@Override
public void onFailure(Call<List<Character>> call, Throwable t) {
}
});
とconfigViews()メソッドは、私が最初に(私は彼らがインフレに影響するかどうかをテストするために周りのビットを動かしてきた始めたときよりも簡単とはいえ、ここにあるものRecyclerViewの):
private void configViews() {
characterAdapter = new CharacterAdapter(this);
recyclerView.setAdapter(characterAdapter);
}
編集:すべてのあなたの返信をありがとう!ここで要求されるようにアダプタクラスです:原則として
public class CharacterAdapter extends
RecyclerView.Adapter<CharacterAdapter.Holder> {
private static final String TAG = CharacterAdapter.class.getSimpleName();
private final CharacterClickListener clickListener;
private List<Character> characters;
//Constructor for CharacterAdapter.
public CharacterAdapter(CharacterClickListener listener){
characters = new ArrayList<>();
clickListener = listener;
}
//Inflates CardView layout
@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
View row =
LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, parent,
false);
return new Holder(row);
}
@Override
public void onBindViewHolder(Holder holder, int position) {
Character currentCharacter = characters.get(position);
holder.name.setText(currentCharacter.getName());
holder.description.setText(currentCharacter.getDescription());
//Picasso loads image from URL
Picasso.with(holder.itemView.getContext())
.load("http://gateway.marvel.com/"+
currentCharacter.getThumbnail()).into(holder.thumbnail);
}
@Override
public int getItemCount() {
return characters.size();
}
public void addCharacter(Character character) {
//Log.d(TAG, character.getThumbnail());
characters.add(character);
notifyDataSetChanged();
}
public Character getSelectedCharacter(int position) {
return characters.get(position);
}
public class Holder extends RecyclerView.ViewHolder implements
View.OnClickListener{
//Holder class created to be implemented by adapter.
private ImageView thumbnail;
private TextView name, description;
public Holder(View itemView) {
super(itemView);
thumbnail = (ImageView)
itemView.findViewById(R.id.character_thumbnail);
name = (TextView) itemView.findViewById(R.id.character_name);
description = (TextView)
itemView.findViewById(R.id.character_description);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
clickListener.onClick(getLayoutPosition());
}
}
public interface CharacterClickListener {
void onClick(int position);
}
}
感謝を再オープンした
これで、文字配列をどこにアダプターに渡しますか?アダプタのgetviewメソッドでは、どうやってそれを実装しているのですか?今ではあなたのアダプタ全体のコードも必要になります。あなたの質問に追加することができます –
質問にアダプタクラスを追加 –