2

我試圖在片段上設置適配器,但沒有顯示出來。在片段(Recycler View)上調用setAdapter不起作用

該對象從API中檢索數據,但不顯示在屏幕上。

我已經在rvItem.setAdapter(mainAdapter);上放了斷點但沒有出現,調試通過了。


這是一個適合所有人使用的適配器。

eu consigo pegar asinformaçõesda API mas nada acontece,nãoaparece nada na tela。

Ja coloquei o breakpoint no 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(); 

} 

} 

適配器:

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

只要檢查你的'onItemListLoad()'你實際上是獲取列表還是不,也檢查你是從'ObjectAdapter.convertItemToObjetct(itemList)' –

+0

'onItemListLoad()'獲取列表,但我認爲問題出在Adapter上。 –

+0

調試代碼時,應用程序不會輸入'displayItemList',而是顯示'itemList'的大小。 –

回答

2

請檢查您的適配器爲空或不是

+0

請考慮添加評論而不是答案,如果您建議進行檢查。 –

+0

對不起@Nilesh。我沒有足夠的信譽直接發表評論 –

+0

我檢查並且適配器是空的。 –

0

您需要直接在onCreateView方法設置適配器和呼叫轉接的notifyDataSetChanged()時的數據加載

+0

我只是試過這個,但'notifyDataSetChanged()'爲null,就像適配器一樣。 –

+0

您需要手動創建並設置適配器到RecycleView – Sergey