【问题标题】:How we increase Recyler View Item from 0-9 to Infinite?我们如何将 Recyclerview Item 从 0-9 增加到 Infinite?
【发布时间】:2017-05-13 07:46:29
【问题描述】:

我的代码是:

  JSONArray jsonArray=new JSONArray(response);
                        if(jsonArray.length()==0){
                            Toast.makeText(context,"No Data",Toast.LENGTH_SHORT).show();
                        }else {
                            for (int i = 0; i < jsonArray.length(); i++) {
                                innerListData = new TakeAttendanceModel();
                                innerListData = ((TakeAttendanceModel) JSonUtil.jsonToObject(jsonArray.getString(i), TakeAttendanceModel.class));
                                innerListData.status = "P";
                                innerListData.attendanceDate = DateTimeUtils.getDate();
                                attenList.add(innerListData);
                            }
                            submitAtten=(Button)rootView.findViewById(R.id.takeAttendanceSubmit);
                            submitAtten.setVisibility(View.VISIBLE);
                        }
                            Log.d("Responsse : ", response);

                    }
                    takeAttendanceAdapter = new TakeAttendanceAdapter(context,attenList);
                    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(context);
                    recyclerViewAttendanceList.setLayoutManager(mLayoutManager);
                    recyclerViewAttendanceList.setItemAnimator(new DefaultItemAnimator());
                    recyclerViewAttendanceList.setAdapter(takeAttendanceAdapter);
                    takeAttendanceAdapter.notifyDataSetChanged();

我的适配器代码是:

 private List<TakeAttendanceModel> list;

    public TakeAttendanceAdapter(Context context, List<TakeAttendanceModel> list) {
        this.context = context;
        this.list = list;

    }
    @Override
    public AttendanceListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View convertview = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.inner_list_attendance, parent, false);

        return new AttendanceListViewHolder(convertview);
    }

    @Override
    public void onBindViewHolder(final AttendanceListViewHolder holder, final int position) {
        holder.textViewStudentName.setText(list.get(position).studFullName);
        holder.textViewStudentRollNumber.setText(list.get(position).primaryKey);
        holder.texViewStudentPreFix.setText(list.get(position).prefix);


        holder.SSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                                         boolean isChecked) {
                //final LinkedList<String> innerLinklist=new LinkedList<>();
                if (isChecked) {
                    /*innerLinklist.add(list.get(position).primaryKey);
                    innerLinklist.add(list.get(position).studFullName);
                    innerLinklist.add(list.get(position).status="P");*/
                    // linkedList.add(innerLinklist);
                    //Log.v("Attndce Liist After Toggle",linkedList.toString());
                    list.get(position).status="P";
                } else {
                    /*innerLinklist.add(list.get(position).primaryKey);
                    innerLinklist.add(list.get(position).studFullName);
                    innerLinklist.add(list.get(position).status="A");*/
                    // linkedList.add(innerLinklist);
                    //Log.v("Attndce Liist After Toggle",linkedList.toString());
                    list.get(position).status="A";
                }

                Log.v("Attndce Inner",list.toString());
                //DataManager.factory().linkedList.add(innerLinklist);


                //Log.v("Attndce Full Linklist",DataManager.factory().linkedList.toString());
            }

        });

        //Log.v("Attndce Liist After Toggle",DataManager.factory().linkedList.toString());
    }

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

    public class AttendanceListViewHolder extends RecyclerView.ViewHolder {
        /*public ImageView imageViewProfilePic;*/
        public TextView textViewStudentName, textViewStudentRollNumber,texViewStudentPreFix;
        public SwitchCompat SSwitch;
        public AttendanceListViewHolder(View convertview) {
            super(convertview);
            texViewStudentPreFix=(TextView)convertview.findViewById(R.id.textAttendanceStudentPrfix) ;
            textViewStudentName = (TextView) convertview.findViewById(R.id.textViewAttendanceStudentName);
            textViewStudentRollNumber = (TextView) convertview.findViewById(R.id.textViewAttendanceStudentRollno);
            SSwitch = (SwitchCompat) convertview.findViewById(R.id.textViewAttendanceSwitch);
        }
    }

这是我的适配器代码,其中放置了开关。

实际上在 RecylerView 中我放置了一个开关按钮,当开关按钮在 0 位置打开时,自动开关在第 9 位置后打开。

请给我一个解决方案。

【问题讨论】:

  • 请添加您尝试过的代码。
  • 你的适配器代码在哪里?
  • blog.inapptext.com/… - 使用此博客作为参考来控制用户在回收站视图上的操作
  • 请查看适配器代码#Mohammed Atif

标签: android android-recyclerview


【解决方案1】:

首先,为你的适配器创建一个合适的 POJO 类。

永远不要使用 list.get(position).variable 之类的东西,而是将您的变量设为私有并使用 setter 和 getter,例如 list.get(position).getVariable()list.get(position).setVariable(variable)

然后如您所知,由于 RecyclerView 总是回收视图,因此建议在每次 UI 更改时使用 if 后跟 else。在您的情况下,您只是更改开关条件而不在任何地方重置它。

最重要的部分,永远不要使用传递的位置作为 一个参数。而是使用我在 解决方案

检查下面的更新代码:

    @Override
    public void onBindViewHolder(final AttendanceListViewHolder holder, final int position) {
        final int adapterPosition = holder.getAdapterPosition();
        holder.textViewStudentName.setText(list.get(adapterPosition).studFullName);
        holder.textViewStudentRollNumber.setText(list.get(adapterPosition).primaryKey);
        holder.texViewStudentPreFix.setText(list.get(adapterPosition).prefix);
        holder.SSwitch.setSelected(list.get(adapterPosition).getStatus());

        holder.SSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                list.get(adapterPosition).setStatus(isChecked);
                notifyItemChanged(adapterPosition);
                Log.v("Attndce Inner",list.toString());
            }
        });
    }

【讨论】:

  • getStatus() 显示错误@无法解析方法
  • 我做 getter setter 但是当我们点击按钮时它仍然保持相同的位置 ON/OFF 并且在第 9 个位置之后它会改变
  • 当我们点击第二次时,它会改变按钮的开/关
  • @rishabh 我认为你没有正确实现它,你能更新你的 Javabean 类和你更新的adatper代码吗?
  • 请分享您的更新代码。你肯定没有正确实施它
【解决方案2】:

更新代码为:

 @Override
    public void onBindViewHolder(final AttendanceListViewHolder holder, int position) {
        final int adapterPosition = holder.getAdapterPosition();
        holder.textViewStudentName.setText(list.get(adapterPosition).studFullName);
        holder.textViewStudentRollNumber.setText(list.get(adapterPosition).primaryKey);
        holder.texViewStudentPreFix.setText(list.get(adapterPosition).prefix);
        holder.SSwitch.setSelected(list.get(adapterPosition).getStatus());



        holder.SSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                                         boolean isChecked) {

                list.get(adapterPosition).setStatus(isChecked);
                notifyItemChanged(adapterPosition);
                Log.v("Attndce Inner",list.toString());


                //Log.v("Attndce Full Linklist",DataManager.factory().linkedList.toString());
            }

        });

模型类是:

public class TakeAttendanceModel {
    public String primaryKey;
    public String prefix;
    public String studFullName;
    public String attendanceDate;
    public boolean status;

    public boolean getStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2020-01-17
    • 2016-06-28
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多