代码之家  ›  专栏  ›  技术社区  ›  Diana Vrabie

RecyclerView不显示任何数据

  •  0
  • Diana Vrabie  · 技术社区  · 8 年前

    我为这个问题挣扎了一段时间。我有个活动( SerieActivity )其中,我允许用户选择各种项目并给它们赋值。项目存储在 ArrayList<Variable> 哪里 Variable 是我定义的一个类。项目显示在 RecyclerView .这个很好用。单击该活动中的按钮后,用户将被发送到另一个活动( Result )显示与 ArrayList 在里面 连续性 ,以及用户输入的相应值。

    在我的 后果 活动我已创建 连续性 类,然后 阵列列表 存储原始值的步骤 阵列列表 从…起 连续性 .然而,我的 后果 类未填充数据。可能会出什么问题?

    这是我的代码:

    变量

    public class Variable {
    
        boolean known;
        String unit, name;
        double value;
    }
    

    RVAdapterSerie -中使用的RecyclerView适配器 连续性

    public class RVAdapterSerie extends RecyclerView.Adapter<RVAdapterSerie.ViewHolder> {
    
        private Context context;
        private ArrayList<Variable> variableList;
    
        public RVAdapterSerie(Context context, ArrayList<Variable> variableList) {
            this.context = context;
            this.variableList = variableList;
        }
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(context).inflate(R.layout.recycler_item, parent, false);
            return new ViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(RVAdapterSerie.ViewHolder holder, int position) {
            Variable v = variableList.get(position);
            holder.setItems(v);
        }
    
        @Override
        public int getItemCount() {
            return variableList.size();
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
            private CheckBox checkBox;
            private EditText editText;
            private TextView textView;
    
            public ViewHolder(View itemView) {
                super(itemView);
                checkBox = itemView.findViewById(R.id.value_cb);
                editText = itemView.findViewById(R.id.value_et);
                textView = itemView.findViewById(R.id.value_tv);
            }
    
            public void setItems (Variable variable) {
                checkBox.setText(variable.getName());
                editText.setText(String.format("%.3f", variable.getValue()));
                textView.setText(variable.getUnit());
            }
        }
    }
    

    连续性

    public class SerieActivity extends AppCompatActivity {
    
        public ArrayList<Variable> mList = new ArrayList<>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_serie);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            RecyclerView recyclerView = findViewById(R.id.serie_rv);
            RVAdapterSerie rvAdapterSerie = new RVAdapterSerie(this, mList);
            recyclerView.setAdapter(rvAdapterSerie);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
    
    
            populateList();
            rvAdapterSerie.notifyDataSetChanged();
    
            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.serie_fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(SerieActivity.this, Result.class);
                    intent.putExtra("tag", "serie");
                    startActivity(intent);
                }
            });
        }
    
        public void populateList() {
            mList.add(new Variable(false, "dummyunit", "dummyname", 0));
            mList.add(new Variable(false, "diofishafuio", "ghfuef", 0));
            mList.add(new Variable(false, "diofishdfesffafuio", "ghfuef", 0));
            //add dummy items
        }
    }
    

    RVResultAdapter -RecyclerView-in适配器 后果

    public class RVResultAdapter extends RecyclerView.Adapter<RVResultAdapter.ViewHolder> {
    
        private Context context;
        private ArrayList<Variable> variableList;
    
        public RVResultAdapter(Context context, ArrayList<Variable> variableList) {
            this.context = context;
            this.variableList = variableList;
        }
    
        @Override
        public RVResultAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(context).inflate(R.layout.result_item, parent, false);
            return new ViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(RVResultAdapter.ViewHolder holder, int position) {
            Variable v = variableList.get(position);
            holder.setItems(v);
        }
    
        @Override
        public int getItemCount() {
            return variableList.size();
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
    
            TextView textView1;
            TextView textView2;
            TextView textView3;
    
            public ViewHolder(View itemView) {
                super(itemView);
                textView1 = itemView.findViewById(R.id.result_name_tv);
                textView2 = itemView.findViewById(R.id.result_value_tv);
                textView3 = itemView.findViewById(R.id.result_unit_tv);
            }
    
            public void setItems (Variable variable) {
                textView1.setText(variable.getName());
                textView2.setText(String.format("%.3f", variable.getValue()));
                textView3.setText(variable.getUnit());
            }
        }
    }
    

    后果

    public class Result extends AppCompatActivity {
    
        public ArrayList<Variable> rList = new ArrayList<>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_result);
    
            Intent intent = getIntent();
            String tag = intent.getExtras().getString("tag");
    
            if (tag.equals("serie")) {
                SerieActivity serieActivity = new SerieActivity();
                rList = serieActivity.mList;
            }
    
            RecyclerView recyclerView = findViewById(R.id.result_rv);
            RVResultAdapter rvResultAdapter = new RVResultAdapter(this, rList);
            recyclerView.setAdapter(rvResultAdapter);
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            rvResultAdapter.notifyDataSetChanged();
        }
    }
    

    我的问题是在 后果 。当我上下滚动时,它会显示蓝色的“内容结束”内容,所以我猜是RecyclerView 那里,但没有任何数据。非常感谢您的帮助。我对Android和Java编程非常陌生,所以我想这一定是一件我看不到的蠢事。

    3 回复  |  直到 8 年前
        1
  •  1
  •   Khemraj Sharma    8 年前

    你在干什么伙计。如何从的新对象获取列表 SerieActivity.class ?

        if (tag.equals("serie")) {
            SerieActivity serieActivity = new SerieActivity();
            rList = serieActivity.mList;
        }
    

    这是完全错误的方式。如果要在活动之间传递列表。可以使用可包裹的方法 putExtra getExtra

    假设您的列表是字符串列表,则使数据 ArrayList<String> 和使用 intent.putStringArrayListExtra("data", data)

    以下是您需要的代码框架:

    首先需要创建一个Parcelable对象类,请参见示例

    public class Student implements Parcelable {
    
            int id;
            String name;
    
            public Student(int id, String name) {
                this.id = id;
                this.name = name;
    
            }
    
            public int getId() {
                return id;
            }
    
            public String getName() {
                return name;
            }
    
    
            @Override
            public int describeContents() {
                // TODO Auto-generated method stub
                return 0;
            }
    
            @Override
            public void writeToParcel(Parcel dest, int arg1) {
                // TODO Auto-generated method stub
                dest.writeInt(id);
                dest.writeString(name);
            }
    
            public Student(Parcel in) {
                id = in.readInt();
                name = in.readString();
            }
    
            public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
                public Student createFromParcel(Parcel in) {
                    return new Student(in);
                }
    
                public Student[] newArray(int size) {
                    return new Student[size];
                }
            };
        }
    

    和列表

    ArrayList<Student> arraylist = new ArrayList<Student>();
    

    调用活动的代码

    Intent intent = new Intent(this, SecondActivity.class);
    Bundle bundle = new Bundle();
    bundle.putParcelableArrayList("mylist", arraylist);
    intent.putExtras(bundle);       
    this.startActivity(intent);
    

    调用活动的代码

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);   
    
        Bundle bundle = getIntent().getExtras();
        ArrayList<Student> arraylist = bundle.getParcelableArrayList("mylist");
    }
    
        2
  •  0
  •   rubin94    8 年前

    所以你打电话来 SerieActivity 中的构造函数 Results 活动和执行 populateList() 在…内 onCreate() 。您不应该以这种方式创建活动,因为 onCreate() 将永远不会被调用。相反,您应该使用 putExtra 和使用 Parcelable 界面

        3
  •  0
  •   M Ali Khattak    8 年前

    只需像这样设置recyclerview代码,首先初始化适配器,然后设置布局管理器,然后设置为adapter to recyclerview。

    recyclerView=(recyclerView)findViewById(R.id.recycler\u视图);

        mAdapter = new MoviesAdapter(movieList);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(mAdapter);
    
        prepareMovieData();