2

Ich habe versucht, den Adapter auf Fragment, aber nichts erscheint.Aufruf setAdapter auf Fragment (Recycler View) funktioniert nicht

Das Objekt ruft die Daten von der API ab, wird jedoch nicht auf dem Bildschirm angezeigt.

Ich habe bereits den Breakpoint auf rvItem.setAdapter(mainAdapter); gesetzt, aber nichts passiert, das Debug geht gerade durch.


In den Einkaufswagen anzeigen oder in den Warenkorb einfügen.

eu consigo pegar als information von API mas nada acontece, nicht mehr verfügbar.

Ja coloquei o Haltepunkt Nr. rvItem.setAdapter(mainAdapter); mas o debug passa direto.


public class ItemFragment extends Fragment { 

private MainAdapter mainAdapter; 
private ItemPresenter itemPresenter; 
private GridLayoutManager mLayoutManager; 
private List<ObjectAdapter> list = new ArrayList<>(); 


private String region = "br"; 


@Bind(R.id.rvItem) 
RecyclerView rvItem; 

public ItemFragment() { 
    // Required empty public constructor 

} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_item, container, false); 
    ButterKnife.bind(this, view); 
    itemPresenter = new ItemPresenter(); 
    mLayoutManager = new GridLayoutManager(getActivity(), 4); 
    rvItem.setLayoutManager(mLayoutManager); 

    getList(); 

    return view; 

} 

private void getList() { 
    itemPresenter.loadItemList(region, "all", AppConfigs.api_key, new ItemListListener() { 
     @Override 
     public void onRequestStarted() { 
     } 

     @Override 
     public void onRequestFinished() { 

     } 

     @Override 
     public void onError(Throwable error) { 

     } 

     @Override 
     public void onItemListLoad(List<ItemDto> itemList) { 

      displayItemList(ObjectAdapter.convertItemToObjetct(itemList)); 


     } 
    }); 

} 

public void displayItemList(List<ObjectAdapter> itemList) { 
    list = itemList; 

    mainAdapter = new MainAdapter(getActivity(), list, new MainAdapter.OnObjectClickListener() { 
     @Override 
     public void OnObjectClickListener(ObjectAdapter objectAdapter) { 
      Toast.makeText(getActivity(), "Object Adapter" + objectAdapter.Id, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    rvItem.setAdapter(mainAdapter); 
    mainAdapter.notifyDataSetChanged(); 

} 

} 

Adapter:

public class MainAdapter extends      
RecyclerView.Adapter<MainAdapter.MainAdapterViewHolder> { 

public List<ObjectAdapter> mObjecterList; 
private final OnObjectClickListener listener; 
private Context mContext; 


public interface OnObjectClickListener { 
    void OnObjectClickListener(ObjectAdapter objectAdapter); 
} 


public MainAdapter(Context context, List<ObjectAdapter> objectAdapterList, OnObjectClickListener listener) { 
    this.mObjecterList = objectAdapterList; 
    this.listener = listener; 
    this.mContext = context; 
} 

@Override 
public MainAdapter.MainAdapterViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_main_adapter, parent, false); 

    return new MainAdapterViewHolder(view); 
} 

@Override 
public void onBindViewHolder(MainAdapter.MainAdapterViewHolder holder, int position) { 
    ObjectAdapter ob = mObjecterList.get(position); 

    holder.tvNameText.setText(ob.Name); 
    holder.bind(mObjecterList.get(position), listener); 

    String url = ""; 
    switch (ob.Type){ 

     case CHAMPION: url = String.format(AppConfigs.portraitChampion, ob.Portrait); 
      break; 
     case SPELL: url = String.format(AppConfigs.portraitSpell, ob.Portrait); 
      break; 
     case ITEM: url = String.format(AppConfigs.portraitItem, ob.Portrait); 
      break; 
    } 

    Picasso.with(mContext).load(url).into(holder.ivRetrato); 

} 

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

public static class MainAdapterViewHolder extends RecyclerView.ViewHolder { 

    public TextView tvNameText; 
    public ImageView ivRetrato; 

    public MainAdapterViewHolder(View itemView) { 
     super(itemView); 

     this.tvNameText = (TextView) itemView.findViewById(R.id.tvNameText); 
     this.ivRetrato = (ImageView) itemView.findViewById(R.id.ivImagePortrait); 
    } 

    public void bind(final ObjectAdapter objectAdapterListItem, final OnObjectClickListener listener) { 
     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       listener.OnObjectClickListener(objectAdapterListItem); 
      } 
     }); 
    } 
} 
} 
+0

Überprüfen Sie einfach Ihre 'onItemListLoad()', dass Sie tatsächlich die Liste oder erhalten nicht und überprüfen Sie auch, dass Sie die Liste von 'ObjectAdapter.convertItemToObjetct (itemList)' –

+0

Die 'onItemListLoad()' erhält die Liste, aber ich denke, das Problem ist auf Adapter. –

+0

Wenn Sie den Code debuggen, gibt die App nicht auf 'displayItemList' ein, sondern zeigt die Größe der' itemList' an. –

Antwort

2

Bitte überprüfen Sie, ob Ihr Adapter null ist oder nicht

+0

Bitte denken Sie darüber nach, einen Kommentar anstelle einer Antwort hinzuzufügen, wenn Sie eine Überprüfung vorschlagen. –

+0

Sorry @Nilesh. Ich habe nicht genug Ruf, um direkt zu kommentieren –

+0

Ich überprüfte und der Adapter kommt Null. –

0

Sie benötigen Adapter setzen direkt bei onCreateView Verfahren und notifyDataSetChanged() des Adapters aufrufen, wenn Daten

geladen
+0

Ich habe gerade versucht, aber die 'notifyDataSetChanged()' ist null, wie der Adapter. –

+0

Sie müssen den Adapter manuell in RecycleView erstellen und einrichten – Sergey

Verwandte Themen