首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“创建时不得附加ViewHolder视图”-带ArrayList的RecyclerView

“创建时不得附加ViewHolder视图”-带ArrayList的RecyclerView
EN

Stack Overflow用户
提问于 2019-06-25 20:16:01
回答 5查看 1.9K关注 0票数 0

我是Android和Android Studio的新手。我试图用arraylist获取一个回收器视图,但得到了错误"ViewHolder视图在创建时不能附加“。这是我第一次尝试实现RecyclerView。首先,我尝试将静态数据放入布局中,但稍后,我希望从数据库中获取数据,并在活动上动态显示它。

主要活动:

代码语言:javascript
运行
复制
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerview;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar  = findViewById(R.id.main_actionbar);
        setSupportActionBar(toolbar);

        ArrayList<ExampleItem> exampleList = new ArrayList<>();
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product1","Description", "Bla Bla Bla", "Bla Bla Bla"));
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product2","Description", "Bla Bla Bla", "Bla Bla Bla"));
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product3","Description", "Bla Bla Bla", "Bla Bla Bla"));
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product4","Description", "Bla Bla Bla", "Bla Bla Bla"));
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product5","Description", "Bla Bla Bla", "Bla Bla Bla"));
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product6","Description", "Bla Bla Bla", "Bla Bla Bla"));
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product7","Description", "Bla Bla Bla", "Bla Bla Bla"));
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product8","Description", "Bla Bla Bla", "Bla Bla Bla"));
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product9","Description", "Bla Bla Bla", "Bla Bla Bla"));
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product10","Description", "Bla Bla Bla", "Bla Bla Bla"));
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product11","Description", "Bla Bla Bla", "Bla Bla Bla"));
        exampleList.add(new ExampleItem(R.drawable.ic_search_black_24dp,"Product12","Description", "Bla Bla Bla", "Bla Bla Bla"));

        mRecyclerview = findViewById(R.id.main_recyclerview);
        mRecyclerview.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mAdapter = new ExampleAdpater(exampleList);

        mRecyclerview.setLayoutManager(mLayoutManager);
        mRecyclerview.setAdapter(mAdapter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.sample_menu, menu);
        return true;
    }
}

示例代码(类):-

代码语言:javascript
运行
复制
package com.example.myapplication;

public class ExampleItem {
    private int mImageResource;
    private String mText1;
    private String mText2;
    private String mText3;
    private String mText4;

    public ExampleItem(int imageResource, String text1, String text2, String text3, String text4){
        mImageResource = imageResource;
        mText1 = text1;
        mText2 = text2;
        mText3 = text3;
        mText4 = text4;

    }

    public int getImageResource(){
        return  mImageResource;
    }

    public String getText1(){
        return mText1;
    }

    public String getText2(){
        return mText2;
    }

    public String getText3(){
        return mText3;
    }

    public String getText4(){
        return mText4;
    }
}

ExampleAdapter (类):-

代码语言:javascript
运行
复制
package com.example.myapplication;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class ExampleAdpater extends RecyclerView.Adapter<ExampleAdpater.ExampleviewHolder> {

    private ArrayList<ExampleItem> mExampleList;

    public static class  ExampleviewHolder extends RecyclerView.ViewHolder{

        public ImageView mImageView;
        public TextView mTextView1;
        public TextView mTextView2;
        public TextView mTextView3;
        public TextView mTextView4;

        public ExampleviewHolder(@NonNull View itemView) {
            super(itemView);
            mImageView = itemView.findViewById(R.id.myImageView1);
            mTextView1 = itemView.findViewById(R.id.myTextView1);
            mTextView2 = itemView.findViewById(R.id.myTextView2);
            mTextView3 = itemView.findViewById(R.id.myTextView3);
            mTextView4 = itemView.findViewById(R.id.myTextView4);
        }
    }

    public ExampleAdpater(ArrayList<ExampleItem> exampleList){
        mExampleList = exampleList;
    }

    @NonNull
    @Override
    public ExampleviewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, parent);
        ExampleviewHolder evh = new ExampleviewHolder(v);
        return  evh;
    }

    @Override
    public void onBindViewHolder(@NonNull ExampleviewHolder holder, int position) {
        ExampleItem currentItem = mExampleList.get(position);

        holder.mImageView.setImageResource(currentItem.getImageResource());
        holder.mTextView1.setText(currentItem.getText1());
        holder.mTextView2.setText(currentItem.getText2());
        holder.mTextView3.setText(currentItem.getText3());
        holder.mTextView4.setText(currentItem.getText4());
    }

    @Override
    public int getItemCount() {
        return mExampleList.size();
    }
}
EN

回答 5

Stack Overflow用户

发布于 2019-06-25 20:23:39

false传递给inflate方法的第二个参数。

代码语言:javascript
运行
复制
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, false);
票数 1
EN

Stack Overflow用户

发布于 2019-06-25 20:31:34

父视图v= LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item,

);

这将隐式地将膨胀的项添加到parent。你不应该对RecyclerView这么做。

使用

代码语言:javascript
运行
复制
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, parent, false);

不将其添加到父级。

票数 1
EN

Stack Overflow用户

发布于 2019-06-25 20:33:56

尝试将附加到根目录的布尔值false作为参数添加到onCreateViewHolder中。即

代码语言:javascript
运行
复制
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, parent, false);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56753849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档