-1

Ich habe diesen Fehler, eigentlich weiß ich nicht über Fragmente.Probleme mit Fragment mit RecyclerView und 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 Leere

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

Adapter

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

Der Fehler

12-08 00: 00: 05.727 1784-1784/com.mighty.cupoferta E/RecyclerView: No Adapter angebracht ist; Layout überspringen

Dieser Code basiert auf this Link. Aber er erklärt, wie man eine Aktivität einrichtet, wie kann ich ein Fragment einfügen?

+0

haben Sie Ihre Arraylist überprüft – YoLo

Antwort

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

Verlassen Sie sich nicht auf die Netzwerkantwort, um Ihren Adapter einzurichten.

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

Sie können es hier tun.

Dann, nachdem der Netzwerkantwort Sie Daten an den Adapter hinzufügen und rufen notifyDataSetChanged()

0

Nun, es ist, weil Sie adapter nach Verzögerung setzen, versuchen Sie eine leere adapter-recyclerview zu setzen, bevor Sie rootView zurück, dann aktualisieren adapter auf Retrofit Rückruf wie in

@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

stellen Sie Ihren Adapter in der onCreateView Funktion und verwenden .notifyDataSetChanged() in der loadJson Funktion des Adapters über die Änderungen in den Daten wie die c notifiy Ode unten.

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

und in der Adapterklasse dieses

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