[英]ArrayList not displaying in RecyclerView but no errors shown
[英]Why is the arraylist not being shown in the recyclerview?
我通過使用for循環創建了一個arraylist ,該循環在我的模型類中創建了100個項目。 然后,我嘗試通過使用適配器將此數據綁定到我的recyclerview,並且由於某些奇怪的原因,這些項目沒有顯示在recyclerview中。
我首先研究了我的適配器和recyclerview代碼,以確保它們得到正確實現,並且我沒有發現任何與眾不同的地方,這使我得出結論,實際上並沒有真正創建數據。
這是代碼:
package com.demoapp.moester96.petheart.Models;
import android.content.Context;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class PetRecord {
private static PetRecord sPetRecord;
private List<Pet> mPets;
public static PetRecord get(Context context)
{
if(sPetRecord == null)
{
sPetRecord = new PetRecord(context);
}
return sPetRecord;
}
private PetRecord(Context context)
{
mPets = new ArrayList<>();
for(int i=0; i<100; ++i)
{
Pet pet = new Pet();
pet.setmTitle("Pet #" + i);
pet.setFaved(i % 2 == 0);
mPets.add(pet);
}
}
public List<Pet> getPets()
{
return mPets;
}
public Pet getPet(UUID id)
{
for(Pet pet : mPets)
{
if(pet.getmId().equals(id))
{
return pet;
}
}
return null;
}
}
package com.demoapp.moester96.petheart;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.demoapp.moester96.petheart.Models.Pet;
import com.demoapp.moester96.petheart.Models.PetRecord;
import java.util.List;
public class PetListFragment extends Fragment {
private class PetHolder extends RecyclerView.ViewHolder
{
private Pet mPet;
private TextView mTitleTextView;
private TextView mDateTextView;
public PetHolder(LayoutInflater inflater, ViewGroup parent)
{
super(inflater.inflate(R.layout.list_item_pet,parent,false));
mTitleTextView = (TextView) itemView.findViewById(R.id.pet_list_title);
mDateTextView = (TextView) itemView.findViewById(R.id.pet_list_date);
}
public void bind(Pet pet)
{
mPet = pet;
mTitleTextView.setText(mPet.getmTitle());
mDateTextView.setText(mPet.getmDate().toString());
}
}
private class PetAdapter extends RecyclerView.Adapter<PetHolder>
{
private List<Pet> mPets;
public PetAdapter(List<Pet> pets)
{
mPets = pets;
}
@NonNull
@Override
public PetHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
return new PetHolder(layoutInflater,parent);
}
@Override
public void onBindViewHolder(@NonNull PetHolder petHolder, int i) {
Pet pet = mPets.get(i);
petHolder.bind(pet);
}
@Override
public int getItemCount()
{
return mPets.size();
}
}
private RecyclerView mPetRecyclerView;
private PetAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_pet_list,container,false);
mPetRecyclerView = (RecyclerView) view.findViewById(R.id.pet_recycler_view);
mPetRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
updateUI();
return view;
}
private void updateUI()
{
PetRecord petRecord = PetRecord.get(getActivity());
List<Pet> pets = petRecord.getPets();
mAdapter = new PetAdapter(pets);
mPetRecyclerView.setAdapter(mAdapter);
}
}
我希望在recyclerview中有100個項目的清單,其中包括寵物的編號,日期和時間,但是我得到的recyclerview絕對沒有顯示任何內容。
首先,您應該致電:
mPetRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
設置適配器之后,而不是之前。 就是這樣。 另外,您是否有用於項目設計的.xml文件? 應該將其添加到您說的適配器上:
@NonNull
@Override
public PetHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(getContext();
layoutInflater.inflate(R.layout.insert_your_design_element, parent,false);
return new PetHolder(layoutInflater,parent);
}
在setAdapter之后應調用notifyDataSetChanged
recyclerView = layout.findViewById(R.id.list_recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL));
ListAdapter adapter = new ListAdapter(getActivity());
recyclerView.setAdapter(adapter);
adapter.setList(searchList);
adapter.notifyDataSetChanged();
該視圖應創建
onCreateViewHolder
並應傳遞到視圖架類所在ViewHolder類,你還沒有創建視圖,但你已經使用itemView
,用來初始化布局的意見。
public class PetListFragment extends Fragment {
Context context;
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
//this is one of the best way to get context of the activity to which the particular activity is associated with
}
private class PetHolder extends RecyclerView.ViewHolder
{
private Pet mPet;
private TextView mTitleTextView;
private TextView mDateTextView;
public PetHolder(@NonNull View itemView)
{
super(itemView);
mTitleTextView = (TextView) itemView.findViewById(R.id.pet_list_title);
mDateTextView = (TextView) itemView.findViewById(R.id.pet_list_date);
}
public void bind(Pet pet)
{
mPet = pet;
mTitleTextView.setText(mPet.getmTitle());
mDateTextView.setText(mPet.getmDate().toString());
}
}
private class PetAdapter extends RecyclerView.Adapter<PetHolder>
{
private List<Pet> mPets;
private Context context;
public PetAdapter(List<Pet> pets,Context context)
{
this.context=context;
mPets = pets;
}
@NonNull
@Override
public PetHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view=layoutInflater.inflate(R.layout.list_item_pet,parent,false);
return new PetHolder(view);
}
@Override
public void onBindViewHolder(@NonNull PetHolder petHolder, int i) {
Pet pet = mPets.get(i);
petHolder.bind(pet);
}
@Override
public int getItemCount()
{
return mPets.size();
}
}
private RecyclerView mPetRecyclerView;
private PetAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_pet_list,container,false);
mPetRecyclerView = (RecyclerView) view.findViewById(R.id.pet_recycler_view);
mPetRecyclerView.setLayoutManager(new LinearLayoutManager(context));
updateUI();
return view;
}
private void updateUI()
{
PetRecord petRecord = PetRecord.get(context);
List<Pet> pets = petRecord.getPets();
mAdapter = new PetAdapter(pets,context);
mPetRecyclerView.setAdapter(mAdapter);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.