嵌套for循环,其动态值显示在Android Studio中的RecyclerView上的微调器中

问题描述 投票:1回答:1

我是Android的新手。我想在RecyclerView中的spinner中单独显示feedbackdownitems名称。我以某种方式实现了它,但问题是当显示微调器6名称显示在assignments[]的第一个对象ID 1556中只有3个名称。

我不知道卡在哪里,但我觉得for循环中的逻辑是错误的,在适配器类中获取Name值。

JSON:

{
  "success": true, 
  "assignments": [
    {
      "ID": 1556, 
      "MasterclassAllocationID": 8, 
      "GuruFeedback": null, 
      "Marks": 0, 
      "VimeoVideoID": "318144357", 
      "FeedbackDownItems": [
        {
          "ID": 3, 
          "Name": "Kalapramanam", 
          "Description": "Tempo Control", 
          "VimeoVideoID": "308135133"
        }, 
        {
          "ID": 4, 
          "Name": "Dhin Posture", 
          "Description": "Keep the ring finger bent, Little finger open", 
          "VimeoVideoID": "319381272"
        }, 
        {
          "ID": 5, 
          "Name": "Shruthi", 
          "Description": "Tune the Instrument ", 
          "VimeoVideoID": "319381272"
        }
      ]
    }, 
    {
      "ID": 1558, 
      "MasterclassAllocationID": 8, 
      "GuruFeedback": null, 
      "Marks": 0, 
      "VimeoVideoID": "318144357", 
      "FeedbackDownItems": [
        {
          "ID": 3, 
          "Name": "Kalapramanam", 
          "Description": "Tempo Control", 
          "VimeoVideoID": "308135133"
        }, 
        {
          "ID": 4, 
          "Name": "Dhin Posture", 
          "Description": "Keep the ring finger bent, Little finger open", 
          "VimeoVideoID": "319381272"
        }, 
        {
          "ID": 5, 
          "Name": "Shruthi", 
          "Description": "Tune the Instrument ", 
          "VimeoVideoID": "319381272"
        }
      ]
    }
  ]
}

输出:

enter image description here

enter image description here

我想实现这个目标:

enter image description here

适配器类:

public class GuruAssignmentFragmentAdapter extends RecyclerView.Adapter<GuruAssignmentFragmentAdapter.AssignmentGuruFragHolder> {
    private static final String TAG = GuruAssignmentFragmentAdapter.class.getSimpleName();
    private ArrayList<Assignments> assignmentList;
    private ArrayList<FeedBackItems> mFeedList = new ArrayList<>();
    private ArrayList<AssignmentsForGuru> guruList = new ArrayList<>();
    private ArrayList<PastWeekAssignment> mPastWeekList;
    private Context mContext;
    private Typeface font;   
    private ArrayList<String> name = new ArrayList<String>();
    private int dropdown;
    private String feedDropDown,name1 = null;
    private AssignCorrectedParam assignCorrect;  

    public GuruAssignmentFragmentAdapter(Context mContext) {        
        this.mContext = mContext;        
        Log.d(TAG, "set data in Adapter : ----> ");
    }

    public void getGuruList(ArrayList<AssignmentsForGuru> lists) {
        if (lists != null) {
            guruList.clear();
            guruList.addAll(lists);
            notifyDataSetChanged();
            Log.d(TAG, "getGuruList guruList  ----> " + guruList.size());
        }
    }

    public void getFeedList(ArrayList<FeedBackItems> lists) {
        if (lists != null) {
            mFeedList.clear();
            mFeedList.addAll(lists);
            notifyDataSetChanged();
            Log.d(TAG, "getFeedList mFeedList : ----> " + mFeedList.size());
        }
    }

    @Override
    public AssignmentGuruFragHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.assignment_guru_fragment_list, parent, false);
        return new AssignmentGuruFragHolder(v);
    }

    @Override
    public void onBindViewHolder(AssignmentGuruFragHolder holder, final int position) {
        AssignmentsForGuru list1 = guruList.get(position);
        Log.d(TAG, "onBindViewHolder guruList ---->" + guruList.size());
        Log.d(TAG, "onBindViewHolder mFeedList ---->" + mFeedList.size());
        Picasso.with(mContext).load(guruList.get(position).getGuruVimeoVideoID()).into(holder.ivYoursIcon);       
        holder.tvGurusMarks.setText(list1.getGuruMarks());
        holder.tvWeek.setText(list1.getGuruID());
        //holder.spinnerFeedBack.setItems(list1.getGuruFeedBackItems(),"",mContext);
        holder.itemView.setTag(position);
    }

    @Override
    public int getItemCount() {       
        return guruList == null ? 0 : guruList.size();
    }

    public class AssignmentGuruFragHolder extends RecyclerView.ViewHolder implements MultiSelectionSpinner.MultiSpinnerListener {
        private ImageView ivYoursIcon, ivGurusIcon;
        private TextView tvWeek, tvYours, tvGurusMarks, tvFeedBack, tvFeedBackTitle, tvWeekNo, tvGurusRating;
        private RelativeLayout rlFeedBackLayout;
        private String[] feedBackValue;
        private String selectedSpinItem;
        private Boolean mIsFeedBack;
        private MultiSelectionSpinner multi;
        private MultiSelectionSpinner spinnerFeedBack;
        private List<String> list;
        private Api mApiLogin;
        private Boolean mSuccess;
        private Button btnCorrect;

        public AssignmentGuruFragHolder(final View itemView) {
            super(itemView);

            font = Typeface.createFromAsset(mContext.getAssets(), "AvenirLTStd-Book.otf");
            ivYoursIcon = itemView.findViewById(R.id.ivYoursIcon);
            //ivGurusIcon =  itemView.findViewById(R.id.ivGurusIcon);
            tvWeek = itemView.findViewById(R.id.tvWeek);
            tvYours = itemView.findViewById(R.id.tvYours);
            tvGurusMarks = itemView.findViewById(R.id.tvGurusMarks);
            tvGurusRating = itemView.findViewById(R.id.tvGurusRating);
            spinnerFeedBack = itemView.findViewById(R.id.input1);
            tvFeedBack = itemView.findViewById(R.id.tvFeedBack);
            rlFeedBackLayout = itemView.findViewById(R.id.rlFeedBackLayout);
            tvWeekNo = itemView.findViewById(R.id.tvWeekNo);
            btnCorrect = itemView.findViewById(R.id.btnCorrect);
            //feedBackItems=new FeedBackItems();

            mApiLogin = ApiClient.getClient().create(Api.class);
            Log.d(TAG, "AssignmentGuruFragHolder  guruList: ----->" + guruList.size());
            Log.d(TAG, "AssignmentGuruFragHolder  mFeedList: ----->" + mFeedList.size());

            tvWeek.setTypeface(font);
            tvYours.setTypeface(font);
            tvGurusMarks.setTypeface(font);
            tvFeedBack.setTypeface(font);
            //tvFeedBackTitle.setTypeface(font);
            tvWeekNo.setTypeface(font);
            tvGurusRating.setTypeface(font);
            btnCorrect.setTypeface(font);

            multi = new MultiSelectionSpinner(mContext);
            list = new ArrayList<String>();

            for (int j = 0; j < mFeedList.size(); j++) {
                //String id = guruList.get(j).getGuruID();
                Log.d(TAG, "mFeedList ---->" + mFeedList.size());
                Log.d(TAG, "j ---->" + j);
                //name1 = guruList.get(j).getGuruFeedBackItems().get(j).getFeedBackItemsName();
                name1 = mFeedList.get(j).getFeedBackItemsName();
                Log.d(TAG, "feedList ---->" + mFeedList.get(j).getFeedBackItemsName());
                list.add(name1);
                //Log.d(TAG, "id ---->" + id);
               /* for (int k = 0; k < mFeedList.size(); k++) {
                    name1 = mFeedList.get(k).getFeedBackItemsName();
                    Log.d(TAG, "FeedList size---->" + mFeedList.size());
                    Log.d(TAG, "name1 ---->" + name1);
                    Log.d(TAG, "k ---->" + k);
                    list.add(name1);
                    Log.d(TAG, "AssignmentGuruFragHolder FeedBackItemsName1 ---->" + name1);
                }*/
            }
            Log.d(TAG, "AssignmentGuruFragHolder : name1 ----->" + name1);
            Log.d(TAG, "AssignmentGuruFragHolder : list ----->" + list);
            spinnerFeedBack.setItems(list, "", AssignmentGuruFragHolder.this);

            ivYoursIcon.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int p = getAdapterPosition();
                    String vId = guruList.get(p).getGuruVimeoVideoID();
                    Intent intent = new Intent(mContext, GuruCorrectingVideoActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.putExtra("vid", vId);
                    mContext.startActivity(intent);
                    Log.d(TAG, "ivYoursIcon ----->");
                    //mContext.finishAffinity();
                }
            });
        }

        @Override
        public void onItemsSelected(boolean[] selected) {

        }
    }
}

也许是教训

对于外部赋值数组:

public class AssignmentsForGuru implements Serializable {

    @SerializedName("ID")
    private String GuruID;

    @SerializedName("MasterclassAllocationID")
    private String GuruMAID;

    @SerializedName("GuruFeedback")
    private String GuruGuruFeedback;

    @SerializedName("Marks")
    private String GuruMarks;

    @SerializedName("VimeoVideoID")
    private String GuruVimeoVideoID; 

    @SerializedName("FeedbackDownItems")
    private ArrayList<FeedBackItems> GuruFeedBackItems;

    public void setGuruGuruFeedback(String GuruGuruFeedback) {
        GuruGuruFeedback = GuruGuruFeedback;
    }

    public void setGuruID(String GuruID) {
        GuruID = GuruID;
    }

    public void setGuruMAID(String GuruMAID) {
        GuruMAID = GuruMAID;
    }

    public void setGuruMarks(String GuruMarks) {
        GuruMarks = GuruMarks;
    }

    public String getGuruGuruFeedback() {
        return GuruGuruFeedback;
    }

    public String getGuruID() {
        return GuruID;
    }

    public String getGuruMAID() {
        return GuruMAID;
    }

    public String getGuruMarks() {
        return GuruMarks;
    }

    public String getGuruVimeoVideoID() {
        return GuruVimeoVideoID;
    }

    public void setGuruFeedBackItems(ArrayList<FeedBackItems> guruFeedBackItems) {
        GuruFeedBackItems = guruFeedBackItems;
    }

    public ArrayList<FeedBackItems> getGuruFeedBackItems() {
        return GuruFeedBackItems;//GuruFeedBackItems
    }

    public String toString() {
        return "AssignmentsForGuru{" +
                "GuruID='" + GuruID + '\'' +
                "GuruMAID='" + GuruMAID + '\'' +
                "GuruGuruFeedback='" + GuruGuruFeedback + '\'' +
                "GuruMarks='" + GuruMarks + '\'' +
                "GuruVimeoVideoID='" + GuruVimeoVideoID + '\'' +
                "GuruFeedBackItems='" + GuruFeedBackItems + '\'' +
                '}';
    }
}

内反馈阵列:

public class FeedBackItems implements Serializable {

    @SerializedName("ID")
    private String FeedBackItemsID;

    @SerializedName("Name")
    private String FeedBackItemsName;

    @SerializedName("Description")
    private String FeedBackItemsDescription;

    @SerializedName("VimeoVideoID")
    private String FeedBackItemsVimeoVideoID;

    public void setFeedBackItemsDescription(String feedBackItemsDescription) {
        FeedBackItemsDescription = feedBackItemsDescription;
    }

    public void setFeedBackItemsID(String feedBackItemsID) {
        FeedBackItemsID = feedBackItemsID;
    }

    public void setFeedBackItemsName(String feedBackItemsName) {
        FeedBackItemsName = feedBackItemsName;
    }

    public void setFeedBackItemsVimeoVideoID(String feedBackItemsVimeoVideoID) {
        FeedBackItemsVimeoVideoID = feedBackItemsVimeoVideoID;
    }

    public String getFeedBackItemsDescription() {
        return FeedBackItemsDescription;
    }

    public String getFeedBackItemsID() {
        return FeedBackItemsID;
    }

    public String getFeedBackItemsName() {
        return FeedBackItemsName;
    }

    public String getFeedBackItemsVimeoVideoID() {
        return FeedBackItemsVimeoVideoID;
    }

    public String toString() {
        return "FeedBackItems{" +
                "FeedBackItemsID='" + FeedBackItemsID + '\'' +
                "FeedBackItemsName='" + FeedBackItemsName + '\'' +
                "FeedBackItemsDescription='" + FeedBackItemsDescription + '\'' +
                "FeedBackItemsVimeoVideoID='" + FeedBackItemsVimeoVideoID + '\'' +
                '}';
    }
}

最外面的物体:

public class GetAssignmentsForGuru extends AssignmentsForGuru implements Serializable {

    @SerializedName("success")
    private Boolean getAssignForGuruSuccess;

    @SerializedName("assignments")
    private ArrayList<AssignmentsForGuru> getAssignmentsForGuru;

    public void setGetAssignForGuruSuccess(Boolean getAssignForGuruSuccess) {
        this.getAssignForGuruSuccess = getAssignForGuruSuccess;
    }

    public void setGetAssignmentsForGuru(ArrayList<AssignmentsForGuru> getAssignmentsForGuru) {
        this.getAssignmentsForGuru = getAssignmentsForGuru;
    }

    public ArrayList<AssignmentsForGuru> getGetAssignmentsForGuru() {
        return getAssignmentsForGuru;
    }

    public Boolean getGetAssignForGuruSuccess() {
        return getAssignForGuruSuccess;
    }

    public String toString() {
        return "GetAssignmentsForGuru{" +
                "getAssignForGuruSuccess='" + getAssignForGuruSuccess + '\'' +
                "getAssignmentsForGuru='" + getAssignmentsForGuru + '\'' +
                '}';
    }
}
android spinner
1个回答
0
投票

我花了几天时间解决了上述问题,从stackoverflow搜索各种帖子以获取适配器位置并将onBindViewHolder()中的位置传递给名为getHolderPos()的方法,该方法放在ViewHolder类中。

@Override
    public void onBindViewHolder(final GuruAssignmentFragHolder holder, final int position) {
        list1 = guruList.get(position);
        Log.d(TAG, "onBindViewHolder guruList ---->" + guruList.size());
        Log.d(TAG, "onBindViewHolder mFeedList ---->" + mFeedList.size());            
        holder.tvWeek.setText(list1.getGuruID());
        holder.getHolderPos(holder, position);
        holder.itemView.setTag(position);
}


public class GuruAssignmentFragHolder extends RecyclerView.ViewHolder implements MultiSelectionSpinner.MultiSpinnerListener, ApiCManagerCallback{    

 private void getHolderPos(GuruAssignmentFragHolder holder, int position) {
            for (int k = 0; k < guruList.size(); k++) {
                Log.d(TAG, "guruList in for loop ---->" + guruList.size());
                Log.d(TAG, "position in for loop ---->" + position);
                Log.d(TAG, "k ---->" + k);                
                for (int j = 0; j < guruList.get(k).getGuruFeedBackItems().size(); j++) {
                    if (k == position) {                           
                        name1 = guruList.get(k).getGuruFeedBackItems().get(j).getFeedBackItemsName();                            
                        id = Integer.parseInt(guruList.get(k).getGuruFeedBackItems().get(j).getFeedBackItemsID());
                        Log.d(TAG, "k ---->" + k);
                        Log.d(TAG, "j ---->" + j);
                        Log.d(TAG, "name1 ---->" + name1);
                        Log.d(TAG, "ids ---->" + ids);
                        list.add(name1);
                        listId.add(id);
                        Log.d(TAG, "listId ---->" + listId);
                        Log.d(TAG, "list ---->" + list);    
                    }
                }
            }              
            spinnerFeedBack.setItems(list, listId, "", GuruAssignmentFragHolder.this);
            Log.d(TAG, "list ---->" + list);
            Log.d(TAG, "listId ---->" + listId);         
        }
}

在json中,赋值是外部'k'数组,反馈是内部'j'数组。它检查适配器位置的位置(k ==位置)。对于ID 1556,微调器只获得3个值而不是6个值。

© www.soinside.com 2019 - 2024. All rights reserved.