Android 如何将Recyler视图项从0-9增加到无穷大?

Android 如何将Recyler视图项从0-9增加到无穷大?,android,android-recyclerview,Android,Android Recyclerview,我的代码是: JSONArray jsonArray=new JSONArray(response); if(jsonArray.length()==0){ Toast.makeText(context,"No Data",Toast.LENGTH_SHORT).show(); }else {

我的代码是:

  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();
JSONArray JSONArray=新的JSONArray(响应);
if(jsonArray.length()=0){
Toast.makeText(上下文,“无数据”,Toast.LENGTH_SHORT).show();
}否则{
for(int i=0;i
我的适配器代码是:

 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);
        }
    }
私有列表;
公共TakeAttendanceAdapter(上下文、列表){
this.context=上下文;
this.list=列表;
}
@凌驾
public AttendanceListViewHolder onCreateViewHolder(视图组父级,int-viewType){
View convertview=LayoutInflater.from(parent.getContext())
.充气(R.layout.Internal_list_Attention,parent,false);
返回新的AttendanceListViewHolder(convertview);
}
@凌驾
BindViewHolder上的公共无效(最终AttendanceListViewHolder,最终int位置){
holder.textViewStudentName.setText(list.get(position.studFullName));
holder.textViewStudentRollNumber.setText(list.get(position.primaryKey));
holder.texViewStudentPreFix.setText(list.get(position.prefix));
holder.SSwitch.setOnCheckedChangeListener(新的CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,
布尔值(已检查){
//final LinkedList innerLinklist=新LinkedList();
如果(已检查){
/*innerLinklist.add(list.get(position.primaryKey));
添加(list.get(position.studFullName);
innerLinklist.add(list.get(position.status=“P”)*/
//添加(innerLinklist);
//v(“切换后的Attndce li列表”,linkedList.toString());
list.get(position).status=“P”;
}否则{
/*innerLinklist.add(list.get(position.primaryKey));
添加(list.get(position.studFullName);
innerLinklist.add(list.get(position.status=“A”)*/
//添加(innerLinklist);
//v(“切换后的Attndce li列表”,linkedList.toString());
list.get(position).status=“A”;
}
Log.v(“Attndce-Inner”,list.toString());
//DataManager.factory().linkedList.add(innerLinklist);
//Log.v(“Attndce完整链接列表”,DataManager.factory().linkedList.toString());
}
});
//Log.v(“切换后的附件列表”,DataManager.factory().linkedList.toString());
}
@凌驾
public int getItemCount(){
返回list.size();
}
公共类AttendanceListViewHolder扩展了RecyclerView.ViewHolder{
/*公共图像查看图像查看配置文件pic*/
公共文本视图文本视图学生名称、文本视图学生卷编号、文本视图学生前缀;
公共交换机;
公众参与者列表视图持有者(视图转换视图){
超级(convertview);
texViewStudentPreFix=(TextView)convertview.findViewById(R.id.textAttendanceStudentPrfix);
textViewStudentName=(TextView)convertview.findViewById(R.id.textViewAttendanceStudentName);
textViewStudentRollNumber=(TextView)convertview.findViewById(R.id.textViewAttendancestudentControlNo);
SSwitch=(SwitchCompat)convertview.findViewById(R.id.textViewAttendanceSwitch);
}
}
这是放置交换机的适配器代码

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


请给我一个解决方案。

首先,为适配器创建一个合适的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());
            }
        });
    }
更新代码为:

 @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;
    }

请添加您尝试的代码。适配器代码在哪里使用此博客作为控制的参考