Friday, 21 May 2021

Multiple Spinner in a Recyclerview item

I have a recycler view with 11-row data items. I need to fix two spinners in each row. That the second spinner data should be dependent on the first Spinner data changes. While I'm making new entry data loaded correctly. When I came to edit the first spinner data loading correctly done and already existing data was fixed correctly. But in the second spinner, it shows the data of the last loaded item. i.e. Last row (11th row) spinner data has been set in all the second spinners. How to solve this?

reasoningAdapter =
    new ArrayAdapter<>(thisActivity, android.R.layout.simple_spinner_item, funtioningSpinnerList);
reasoningAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
holder.functioningSpinner.setAdapter(reasoningAdapter);

if (entryStatus.equals(Constants.NEW)) {
    holder.functioningSpinner.setOnItemSelectedListener(new AdapterView . OnItemSelectedListener () {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
            if (pos > 0) {
                remoteLocationEntryModelData.get(position).checkList =
                    funtioningSpinnerList.get(pos);
                //loadScoreSpinner(funtioningSpinnerList.get(pos), holder, position);

                scoreList.clear();

                for (int i = 0; i < fortnightLookupList.size(); i++) {
                    if (fortnightLookupList.get(i).getFunctioning().equals(funtioningSpinnerList.get(pos)) ) {
                        scoreList.add(fortnightLookupList.get(i).getScore());
                    }
                }

                scoreAdapter =
                    new ArrayAdapter<>(thisActivity, android.R.layout.simple_spinner_item, scoreList);
                scoreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                holder.scoreSpinner.setAdapter(scoreAdapter);

            } else {
                remoteLocationEntryModelData.get(position).checkList = "$";
                scoreList.clear();
                scoreList.add(0, "---- select ----");
                scoreAdapter =
                    new ArrayAdapter<>(thisActivity, android.R.layout.simple_spinner_item, scoreList);
                scoreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                holder.scoreSpinner.setAdapter(scoreAdapter);
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

} else if (entryStatus.equals(Constants.EDIT)) {

    if (!TextUtils.isEmpty( String.valueOf( editList.getDescriptions().get(position).getLogId() ) ) ) {
        remoteLocationEntryModelData.get(position).logId =
            editList.getDescriptions().get(position).getLogId();
    }

    if (!TextUtils.isEmpty(editList.getDescriptions().get(position).getRemarks())) {
        holder.remarksEdt.setText(editList.getDescriptions().get(position).getRemarks());
    }



    holder.functioningSpinner.setSelection(
        funtioningSpinnerList.indexOf(
            editList.getDescriptions().get(position).getCheckList()
        )
    );

    holder.functioningSpinner.setOnItemSelectedListener(new AdapterView . OnItemSelectedListener () {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
            if (pos > 0) {
                remoteLocationEntryModelData.get(position).checkList =
                    funtioningSpinnerList.get(pos);
                //loadScoreSpinner(funtioningSpinnerList.get(pos), holder, position);

                scoreList.clear();

                for (int i = 0; i < fortnightLookupList.size(); i++) {
                    if (fortnightLookupList.get(i).getFunctioning()
                            .equals(funtioningSpinnerList.get(pos))
                    ) {
                        scoreList.add(fortnightLookupList.get(i).getScore());
                    }
                }

                scoreAdapter =
                    new ArrayAdapter<>(thisActivity, android.R.layout.simple_spinner_item, scoreList);
                scoreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                holder.scoreSpinner.setAdapter(scoreAdapter);

                //holder.scoreSpinner.setSelection(scoreList.indexOf(editList.getDescriptions().get(position).getScore()));

            } else {
                remoteLocationEntryModelData.get(position).checkList = "$";
                scoreList.clear();
                scoreList.add(0, "---- select ----");
                scoreAdapter =
                    new ArrayAdapter<>(thisActivity, android.R.layout.simple_spinner_item, scoreList);
                scoreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                holder.scoreSpinner.setAdapter(scoreAdapter);
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
}

Note While I debug it step by step it is working correctly, but not when during run

Current Output enter image description here

Expected Output

enter image description here



from Multiple Spinner in a Recyclerview item

No comments:

Post a Comment