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;
}
请添加您尝试的代码。适配器代码在哪里使用此博客作为控制的参考