[英]How to enable the adapter in the mainactivity for RecyclerView?
[英]How to show 2 adapter in one recyclerview in mainactivity?
我有 2 個適配器,我想在一個 recycelrview 中顯示 2 個適配器。 例如,我有一個適配器用於帶圖像的帖子,另一個我有一個適配器用於不帶圖像的帖子。 我想顯示帶有圖像的適配器帖子和不帶圖像的帖子,我嘗試了一些,我的代碼如下。
這是我的主要活動。
//with image
private List<ModelPostImage> postImageList;
private AdapterImage adapterImage;
//without image
private List<ModelPost> postList;
private AdapterPost adapterPost;
//load posts
loadPostWithImage();
loadPostWithoutImage();
//loadWithImage
private void loadPostWithImage() {
DatabaseReference ref
FirebaseDatabase.getInstance().getReference("postImage");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
postImageList.clear();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
ModelPostImage modelPostImage=
ds.getValue(ModelPostImage.class);
postImageList.add(modelPostImage);
adapterImage= new AdapterImage(MainActivity.this,
postImageList);
//set adapter to RecyclerView
recyclerView.setAdapter(adapterImage);
}
}
//loadWithoutImage
private void loadPostWithoutImage() {
DatabaseReference ref
FirebaseDatabase.getInstance().getReference("Posts");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
postList.clear();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
ModelPost modelPost=
ds.getValue(ModelPost.class);
postList.add(modelPost);
adapterPost = new AdapterPost(MainActivity.this,
postList);
//set adapter to RecyclerView
recyclerView.setAdapter(adapterPost);
它沒有顯示帶有圖像的帖子,我該怎么辦?
為 RecyclerView 適配器使用 2 種 ViewHolder,而不是在 1 個 RecyclerView 中有 2 個適配器
您還可以在此處獲得有關如何正確使用 RecyclerView 的更多信息。 https://guides.codepath.com/android/using-the-recyclerview
我認為您不能在一個 recyclerview 上使用 2 個適配器,但您可以為不同類型的布局為您的適配器創建多個視圖持有者類型。 您可以查看https://stackoverflow.com/a/58160491/8300303
您可以一次在一個適配器中添加一個或多個視圖,而不是在一個RecyclerView
中使用兩個適配器。 您只需在適配器中覆蓋getItemViewType()
方法,如下所示:
@Override
public int getItemViewType(int position)
{
if(position==0)
return LAYOUT_ONE;
else
return LAYOUT_TWO;
}
您可以像這樣在onCreateViewHolder
中添加您的視圖:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view =null;
RecyclerView.ViewHolder viewHolder = null;
if(viewType==LAYOUT_ONE)
{
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.one,parent,false);
viewHolder = new ViewHolderOne(view);
}
else
{
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.two,parent,false);
viewHolder= new ViewHolderTwo(view);
}
return viewHolder;
}
並在onBindViewHolder()
中執行以下操作:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if(holder.getItemViewType()== LAYOUT_ONE)
{
// Typecast Viewholder
// Set Viewholder properties
// Add any click listener if any
}
else {
ViewHolderOne vaultItemHolder = (ViewHolderOne) holder;
vaultItemHolder.name.setText(displayText);
vaultItemHolder.name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
.......
}
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.