李堇 2023-02-09 16:56 采纳率: 52.8%
浏览 27
已结题

android使用ExpandableListView出现数据回显异常

当在页面中回显之前的数据时出现了异常现象,返回数据中红框中的应该是有数据,应该选中对应的复选框,但是上边的没有历史数据,不应该被选中,逻辑是在页面中放置了三个复选框,通过数据来控制展示几个,名称和回显之前提交的数据,但是出现了没数据的也被选中的错误现象

img

adapter中的代码如下:


```java
package com.mxjy.ssep.adapter;

import android.content.Context;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import com.mxjy.ssep.R;
import com.mxjy.ssep.http.HttpConnectionUtil;
import com.mxjy.ssep.http.HttpConstant;
import com.mxjy.ssep.model.ApiResponse;
import com.mxjy.ssep.model.TBBaseParam;
import com.mxjy.ssep.model.TBKnowledgeCourse;
import com.mxjy.ssep.model.TRFamilySchoolInteraction;
import com.mxjy.ssep.model.TRSectionQuestionRelation;
import com.mxjy.ssep.ui.fragment.FamilySchoolInteractionFragment;
import com.mxjy.ssep.ui.fragment.SubjectPainPointDetailFragment;
import com.mxjy.ssep.util.JsonUtils;
import com.mxjy.ssep.util.LogUtils;
import com.mxjy.ssep.util.MchnUtils;
import com.mxjy.ssep.util.SharedPreferencesUtil;
import com.mxjy.ssep.util.ToastUtil;

import java.util.List;
import java.util.Map;
import java.util.TreeMap;

/**
 * AI精准练
 */
public class LearningFeedbackAdapter2 extends BaseExpandableListAdapter {
    private FragmentManager fManager;
    private Context mContext = null;
    private List<TRSectionQuestionRelation> mGroupList = null;
    private TreeMap<String,String> point1IdMap;
    private String course;
    private String grade;
    private String studentId;
    private String knowledgeIdResult;
    private String feedbackQuestionTypeResult;
    private boolean rflag;

    public LearningFeedbackAdapter2(Context context, List<TRSectionQuestionRelation> groupList, FragmentManager fManager,TreeMap<String,String> point1IdMap) {
        this.mContext = context;
        this.mGroupList = groupList;
        this.fManager = fManager;
        this.point1IdMap = point1IdMap;
    }
    // 获取组的个数
    @Override
    public int getGroupCount() {
        return mGroupList.size();
    }
    // 获取指定组中的子元素个数
    @Override
    public int getChildrenCount(int groupPosition) {
        //LogUtils.e("=groupPosition=",groupPosition+"");
        if(mGroupList.get(groupPosition) != null && mGroupList.get(groupPosition).getSlist2() != null) {
            return mGroupList.get(groupPosition).getSlist2().size();
        } else {
            return 0;
        }

    }
    //获取指定组中的数据
    @Override
    public String getGroup(int groupPosition) {
        return mGroupList.get(groupPosition).getSectionName();
    }

    //获取指定组中的指定子元素数据。
    @Override
    public String getChild(int groupPosition, int childPosition) {
       // LogUtils.e("=groupPosition___childPosition=",groupPosition+"----"+childPosition);
        return mGroupList.get(groupPosition).getSlist2().get(childPosition).getPoint1Name();
    }

    // 获取指定组的ID,这个组ID必须是唯一的
    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    //获取指定组中的指定子元素ID
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    // 获取显示指定组的视图对象
    //groupPosition 组位置
    //isExpanded    该组是展开状态还是伸缩状态
    //convertView   重用已有的视图对象
    //parent        返回的视图对象始终依附于的视图组
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                             ViewGroup parent) {
        GroupHolder groupHolder = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_learning_feedback3, null);
            groupHolder = new GroupHolder();
            groupHolder.groupNameTv = (TextView) convertView.findViewById(R.id.chapterName);
            convertView.setTag(groupHolder);
        } else {
            groupHolder = (GroupHolder) convertView.getTag();
        }

        groupHolder.groupNameTv = (TextView) convertView.findViewById(R.id.chapterName);
        groupHolder.zdtb = (ImageView) convertView.findViewById(R.id.zdtb);
        convertView.setTag(groupHolder);

        if (isExpanded) {
            groupHolder.zdtb.setImageResource(R.mipmap.icon_zd_up);//展开
        } else {
            groupHolder.zdtb.setImageResource(R.mipmap.icon_zd_down);//未展开
        }
        //LogUtils.e("=getChapterName=",groupPosition+"----"+ mGroupList.get(groupPosition).getChapterName());
        groupHolder.groupNameTv.setText(mGroupList.get(groupPosition).getSectionName());
        return convertView;
    }

    //获取一个视图对象,显示指定组中的指定子元素数据。
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                             View convertView, ViewGroup parent) {
        //LogUtils.e("=point1NAME=",groupPosition+"----"+ mGroupList.get(groupPosition).getSlist().get(childPosition).getKnowledgeTitle());
        ItemHolder itemHolder = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_learning_feedback4, null);
            itemHolder = new ItemHolder();
            itemHolder.nameTv = (TextView) convertView.findViewById(R.id.sectionName);
            itemHolder.itemNameTv = (TextView) convertView.findViewById(R.id.itemName);
            itemHolder.filePageCount = (TextView) convertView.findViewById(R.id.filePageCount);
            itemHolder.checkList = (LinearLayout)convertView.findViewById(R.id.checkList);
            itemHolder.checkbox1 = (CheckBox) convertView.findViewById(R.id.checkbox1);
            itemHolder.checkbox2 = (CheckBox) convertView.findViewById(R.id.checkbox2);
            itemHolder.checkbox3 = (CheckBox) convertView.findViewById(R.id.checkbox3);
            convertView.setTag(itemHolder);
        } else {
            itemHolder = (ItemHolder) convertView.getTag();
        }

        itemHolder.nameTv.setText(mGroupList.get(groupPosition).getSlist2().get(childPosition).getPoint1Name());
        itemHolder.itemNameTv.setTag(mGroupList.get(groupPosition).getSlist2().get(childPosition).getPoint1Id());
        //存储知识点和对应的反馈
        point1IdMap.put(mGroupList.get(groupPosition).getSlist2().get(childPosition).getPoint1Id(),mGroupList.get(groupPosition).getSlist2().get(childPosition).getFeedbackQuestionType());
        //itemHolder.filePageCount.setText(mGroupList.get(groupPosition).getSlist2().get(childPosition).getFilePageCount()+"张");
        itemHolder.itemNameTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LogUtils.e("=立即反馈=",view.getTag().toString());
                LogUtils.e("=立即反馈=",point1IdMap.toString());
                studentId = SharedPreferencesUtil.getString(mContext, "studentId", null);
                course = mGroupList.get(groupPosition).getSlist2().get(childPosition).getCourse();
                grade = mGroupList.get(groupPosition).getSlist2().get(childPosition).getGrade();
                knowledgeIdResult = view.getTag().toString();
                feedbackQuestionTypeResult = point1IdMap.get(view.getTag().toString());
                new createLearningFeedbackInfo().execute();
            }
        });


        List<TBBaseParam> baseParamList = mGroupList.get(groupPosition).getSlist2().get(childPosition).getBaseParamList();
        String point1Id = mGroupList.get(groupPosition).getSlist2().get(childPosition).getPoint1Id();
        String feedbackQuestionType = mGroupList.get(groupPosition).getSlist2().get(childPosition).getFeedbackQuestionType();
        LogUtils.e("=point1Id=",point1Id);
        if(baseParamList != null && baseParamList.size() > 0) {
            for(int i = 0; i < baseParamList.size(); i++) {
                TBBaseParam tbBaseParam = baseParamList.get(i);
                if(i == 0) {
                    itemHolder.checkbox1.setVisibility(View.VISIBLE);
                    itemHolder.checkbox1.setText(tbBaseParam.getParamName());
                    LogUtils.e("=point1Id=",point1Id);
                    LogUtils.e("=feedbackQuestionType=",feedbackQuestionType);
                    LogUtils.e("=ParamId=",tbBaseParam.getParamId());
                    if(feedbackQuestionType != null && feedbackQuestionType.contains(tbBaseParam.getParamId())) {
                        itemHolder.checkbox1.setChecked(true);
                    }
                    itemHolder.checkbox1.setTag(point1Id+"_"+tbBaseParam.getParamId());
                    itemHolder.checkbox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                            String[] tag = compoundButton.getTag().toString().split("_");
                            String point1Id = tag[0];
                            String paramId = tag[1];
                            String feedbackQuestionType = point1IdMap.get(point1Id);
                            if(compoundButton.isChecked()) {
                                if(feedbackQuestionType != null && !"".equals(feedbackQuestionType)) {
                                    if(!feedbackQuestionType.contains(tbBaseParam.getParamId())) {
                                        feedbackQuestionType +=  paramId + "," ;
                                        point1IdMap.put(point1Id,feedbackQuestionType);
                                    }
                                } else {
                                    feedbackQuestionType =  paramId + ",";
                                    point1IdMap.put(point1Id,feedbackQuestionType);
                                }
                            } else {
                                feedbackQuestionType = feedbackQuestionType.replace(paramId+",","");
                                point1IdMap.put(point1Id,feedbackQuestionType);
                            }
                        }
                    });
                }
                if(i == 1) {
                    itemHolder.checkbox2.setVisibility(View.VISIBLE);
                    itemHolder.checkbox2.setText(tbBaseParam.getParamName());
                    if(feedbackQuestionType != null && feedbackQuestionType.contains(tbBaseParam.getParamId())) {
                        itemHolder.checkbox2.setChecked(true);
                    }
                    itemHolder.checkbox2.setTag(point1Id+"_"+tbBaseParam.getParamId());
                    itemHolder.checkbox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                            String[] tag = compoundButton.getTag().toString().split("_");
                            String point1Id = tag[0];
                            String paramId = tag[1];
                            String feedbackQuestionType = point1IdMap.get(point1Id);
                            if(compoundButton.isChecked()) {
                                if(feedbackQuestionType != null && !"".equals(feedbackQuestionType)) {
                                    if(!feedbackQuestionType.contains(tbBaseParam.getParamId())) {
                                        feedbackQuestionType +=  paramId + "," ;
                                        point1IdMap.put(point1Id,feedbackQuestionType);
                                    }
                                } else {
                                    feedbackQuestionType =  paramId + ",";
                                    point1IdMap.put(point1Id,feedbackQuestionType);
                                }
                            } else {
                                feedbackQuestionType = feedbackQuestionType.replace(paramId+",","");
                                point1IdMap.put(point1Id,feedbackQuestionType);
                            }
                        }
                    });
                }
                if(i == 2) {
                    itemHolder.checkbox3.setVisibility(View.VISIBLE);
                    itemHolder.checkbox3.setText(tbBaseParam.getParamName());
                    itemHolder.checkbox3.setTag(point1Id+"_"+tbBaseParam.getParamId());
                    if(feedbackQuestionType != null && feedbackQuestionType.contains(tbBaseParam.getParamId())) {
                        itemHolder.checkbox3.setChecked(true);
                    }
                    itemHolder.checkbox3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                            String[] tag = compoundButton.getTag().toString().split("_");
                            String point1Id = tag[0];
                            String paramId = tag[1];
                            String feedbackQuestionType = point1IdMap.get(point1Id);
                            if(compoundButton.isChecked()) {
                                if(feedbackQuestionType != null && !"".equals(feedbackQuestionType)) {
                                    if(!feedbackQuestionType.contains(tbBaseParam.getParamId())) {
                                        feedbackQuestionType +=  paramId + "," ;
                                        point1IdMap.put(point1Id,feedbackQuestionType);
                                    }
                                } else {
                                    feedbackQuestionType =  paramId + ",";
                                    point1IdMap.put(point1Id,feedbackQuestionType);
                                }
                            } else {
                                feedbackQuestionType = feedbackQuestionType.replace(paramId+",","");
                                point1IdMap.put(point1Id,feedbackQuestionType);
                            }
                        }
                    });
                }
            }
        }

        return convertView;
    }

    // 组和子元素是否持有稳定的ID,也就是底层数据的改变不会影响到它们。
    @Override
    public boolean hasStableIds() {
        return true;
    }

    //是否选中指定位置上的子元素。
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        //LogUtils.e("=选中位置=",groupPosition+"----"+childPosition+"---------"+ mGroupList.get(groupPosition).getSlist().get(childPosition).getKnowledgeTitle());
        return true;
    }



    class GroupHolder {
        public TextView groupNameTv;
        private ImageView zdtb;
    }

    class ItemHolder {
        public TextView fenge;
        public TextView nameTv;
        public TextView itemNameTv;
        public TextView filePageCount;
        public LinearLayout checkList;
        public CheckBox checkbox1;
        public CheckBox checkbox2;
        public CheckBox checkbox3;
    }

    class createLearningFeedbackInfo extends AsyncTask<String, Void, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            /*mProDialog.setMessage(getResources().getString(R.string.load_msg));
            mProDialog.show();*/
        }

        @Override
        protected String doInBackground(String... strings) {
            String url = HttpConstant.createLearningFeedbackInfo;
            String postString = "course="+course+"&grade="+grade+"&studentId="+studentId+"&knowledgeId="+knowledgeIdResult+"&feedbackQuestionType="+feedbackQuestionTypeResult;
            LogUtils.e("postString:" , postString);
            /*TRFamilySchoolInteraction message = new TRFamilySchoolInteraction();
            message.setUserId1(studentId);
            message.setMessageContent(replyContent);
            String postString = JsonUtils.javaBeanToJson(message);*/
            String json = HttpConnectionUtil.AccessUrlGET(mContext,url+"?"+postString);
            LogUtils.e("json:" , json);
            return json;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            /*if (mProDialog != null && mProDialog.isShowing()) {
                mProDialog.cancel();
            }*/
            if (result != null && !result.equals("")) {
                ApiResponse<TRFamilySchoolInteraction> info = JsonUtils.jsonToJavaBean(result, ApiResponse.class);
                if (info == null) {
                    ToastUtil.showShort(mContext, R.string.getData_fail);
                    return;
                }
                if (info != null && info.getCode() != null && info.getCode().equals("10000")) {

                }
            } else {
                ToastUtil.showShort(mContext, R.string.net_notConnectedHint);
            }
        }
    }

}




```

  • 写回答

3条回答 默认 最新

  • 程序yang 全栈领域优质创作者 2023-02-09 17:49
    关注

    这种问题肉眼不好直接看出来,还是建议你debug调试,断点追踪,找到对应的回显代码,看看回显的时候,是不是把前面的值也绑过来了,还是复选框状态没有及时刷新,这些都有可能导致你说的这个问题!

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月13日
  • 创建了问题 2月9日

悬赏问题

  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染