簡體   English   中英

為什么在recyclerview中沒有顯示arraylist?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM