-1

私はこのエラーがありますが、実際はフラグメントについてはわかりません。RecyclerViewとRetrofitでフラグメントを使用する際のトラブル

CreatView

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_inicio, container, 
       false); 
     getActivity().setTitle(R.string.inicio); 
     recyclerView = (RecyclerView) rootView.findViewById(R.id.card_recycler_view); 
     recyclerView.setHasFixedSize(true); 
     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
     recyclerView.setLayoutManager(layoutManager); 
     loadJSON(); 
     return rootView; 
    } 

loadJSONボイド

private void loadJSON(){ 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl("http://192.168.1.42:3000/") 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
    RequestInterface request = retrofit.create(RequestInterface.class); 
    Call<JSONResponse> call = request.getJSON(); 
    call.enqueue(new Callback<JSONResponse>() { 
     @Override 
     public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) { 
      JSONResponse jsonResponse = response.body(); 
      data = new ArrayList<>(Arrays.asList(jsonResponse.getCupon())); 
      adapter = new CuponAdapter(data); 
      recyclerView.setAdapter(adapter); 
     } 

     @Override 
     public void onFailure(Call<JSONResponse> call, Throwable t) { 
      Log.d("Error", t.getMessage()); 
     } 
    }); 
} 

アダプタ

public class CuponAdapter extends RecyclerView.Adapter<CuponAdapter.ViewHolder> { 
private ArrayList<Cupon> cupon; 

public CuponAdapter(ArrayList<Cupon> cupon) { 
    this.cupon = cupon; 
} 

@Override 
public CuponAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false); 
    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int i) { 
    holder.tv_titulo.setText(cupon.get(i).getTitulo()); 
    holder.tv_empresa.setText(cupon.get(i).getEmpresa()); 
    holder.tv_descripcion.setText(cupon.get(i).getDescripcion()); 
} 

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

public class ViewHolder extends RecyclerView.ViewHolder { 
    private TextView tv_titulo, tv_descripcion, tv_empresa; 

    public ViewHolder(View view) { 
     super(view); 
     tv_titulo = (TextView) view.findViewById(R.id.tv_titulo); 
     tv_descripcion = (TextView) view.findViewById(R.id.tv_descripcion); 
     tv_empresa = (TextView) view.findViewById(R.id.tv_empresa); 
    } 
} 
} 

エラー

12-08 00:00:05.727 1784年から1784年/ com.mighty.cupoferta E/RecyclerView:添付なし アダプタ。レイアウトをスキップする

このコードはthisに基づいています。 しかし、彼は活動をする方法を説明します、どのように断片に入れることができますか?

+0

はあなたのArrayListをチェックしています – YoLo

答えて

0
call.enqueue(new Callback<JSONResponse>() { 
    @Override 
    public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) { 
     JSONResponse jsonResponse = response.body(); 
     data = new ArrayList<>(Arrays.asList(jsonResponse.getCupon())); 
     adapter = new CuponAdapter(data); 
     recyclerView.setAdapter(adapter); 
    } 

アダプターを設定するネットワーク応答に依存しないでください。

RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
recyclerView.setLayoutManager(layoutManager); 
recyclerView.setAdapter(adapter); 

あなたはここでそれを行うことができます。

そして、ネットワーク応答の後にあなたは、アダプタにデータを追加し、遅延後adapterを設定しているので、まあそれはnotifyDataSetChanged()

0

を呼び出すことができ、あなたがrootViewを返す前にrecyclerviewに空adapterを設定しようとすると、その後、adapterを更新Retrofitコールバックに

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_inicio, container, 
       false); 
     getActivity().setTitle(R.string.inicio); 
     recyclerView = (RecyclerView) rootView.findViewById(R.id.card_recycler_view); 
     recyclerView.setHasFixedSize(true); 
     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
     recyclerView.setLayoutManager(layoutManager); 
     recyvlerView.setAdapter(new CuponAdapter(new ArrayList<Cupon>())); 
     loadJSON(); 
     return rootView; 
    } 
0

のようにonCreateView機能であなたのアダプタを設定し、Cのようなデータの変更についてのアダプタをnotifiyするloadJSON機能で.notifyDataSetChanged()を使用下のode。

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_inicio, container, 
      false); 
    getActivity().setTitle(R.string.inicio); 
    recyclerView = (RecyclerView) rootView.findViewById(R.id.card_recycler_view); 
    recyclerView.setHasFixedSize(true); 
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
    recyclerView.setLayoutManager(layoutManager); 
    recyclerView.setAdapter(adapter); 
    loadJSON(); 
    return rootView; 
} 

とあなたのアダプタクラスの書き込みでこの

private void loadJSON(){ 
Retrofit retrofit = new Retrofit.Builder() 
     .baseUrl("http://192.168.1.42:3000/") 
     .addConverterFactory(GsonConverterFactory.create()) 
     .build(); 
RequestInterface request = retrofit.create(RequestInterface.class); 
Call<JSONResponse> call = request.getJSON(); 
call.enqueue(new Callback<JSONResponse>() { 
    @Override 
    public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) { 
     JSONResponse jsonResponse = response.body(); 
     data = new ArrayList<>(Arrays.asList(jsonResponse.getCupon())); 
     adapter = new CuponAdapter(data); 
     adapter.notifyDataSetChanged(); 
    } 

    @Override 
    public void onFailure(Call<JSONResponse> call, Throwable t) { 
     Log.d("Error", t.getMessage()); 
    } 
}); 
} 
関連する問題