【发布时间】:2019-11-16 20:28:20
【问题描述】:
我使用 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(), RecyclerView.VERTICAL);
-
是的,不幸的是它没有工作它给了我一个错误,说无法解析构造函数 LinearLayoutManager
-
以防万一,您能否也发布您的项目布局和片段布局?
-
是的,我的错误 new LinearLayoutManager(getActivity(), RecyclerView.VERTICAL, false) 是正确的构造函数
-
是的,即使将其放入构造函数中它仍然无法正常工作,是的,我会为您发布项目和片段布局
标签: java android arraylist android-recyclerview android-arrayadapter