获取所有观看者的回收者视图

时间:2017-12-11 06:33:38

标签: java android android-recyclerview

我需要获得viewholders中所有recyclerview的位置。基本上,当用户单击按钮时,如果任何编辑文本字段为空,则用户无法继续。我还通过类中的setter设置每个编辑文本。这样我就可以删除所有编辑文本的下划线,基本上使其不可编辑。

这是我的onbindviewholder

 @Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position){


    /*
    Holder for exercise row
    Sets the text for exercise, weight, sets, and reps
    Disables text if save button is clicked
     */
    if(holder instanceof ExerciseRowHolder) {

        int pos = holder.getAdapterPosition();
        Log.d("pos", String.format("%s", pos));
        ((ExerciseModel) rowTypeList.get(pos)).setExerciseEditText(((ExerciseRowHolder) holder).exercise);
        ((ExerciseModel) rowTypeList.get(pos)).setWeightEditText(((ExerciseRowHolder) holder).weight);
        ((ExerciseModel) rowTypeList.get(pos)).setSetsEditText(((ExerciseRowHolder) holder).set);
        ((ExerciseModel) rowTypeList.get(pos)).setRepsEditText(((ExerciseRowHolder) holder).rep);
        ((ExerciseModel) rowTypeList.get(pos)).setDragHandle(((ExerciseRowHolder) holder).dragHandle);
        ((ExerciseModel) rowTypeList.get(pos)).setExerciseRowTextWatcher(((ExerciseRowHolder) holder).exerciseRowTextWatcher);
        ((ExerciseRowHolder) holder).updatePosition(pos);

这是用户点击该按钮的时间。这个问题是编辑文本将在屏幕外为viewholders返回null,因为编辑文本正在onbindviewholder中设置,这意味着只有屏幕上的编辑文本被设置。我需要设置所有编辑文本。有关获取viewholders的所有recyclerview的任何建议吗?

        int childCount = displayWorkoutAdapter.getItemCount() - 1;
    //checks for all the children of recyclerView excluding the buttons
    for (int a = childCount; a > 0; a--) {
        RowType rowType = displayWorkoutAdapter.rowTypeList.get(a);

        //if the first row = exercise row, check to see if there is any input in the exercise, sets, and reps field
        //if not, display error
        if (rowType.getClass() == ExerciseModel.class) {
            AutoCompleteTextView exercise = ((ExerciseModel) rowType).getExerciseEditText();
            EditText weight = ((ExerciseModel) rowType).getWeightEditText();
            EditText sets = ((ExerciseModel) rowType).getSetsEditText();
            EditText reps = ((ExerciseModel) rowType).getRepsEditText();

            /*
            if(exercise == null){
                exercise = exerciseRow.findViewById(R.id.autoCompleteTextView);
                weight = exerciseRow.findViewById(R.id.weight);
                sets = exerciseRow.findViewById(R.id.sets);
                reps = exerciseRow.findViewById(R.id.reps);
            }*/


            textListenerToRemoveError(exercise, weight, sets, reps);

1 个答案:

答案 0 :(得分:0)

RecyclerView的要点是它不会同时保留所有项目,因为它会降低性能并仅加载您可以在屏幕上看到的项目。这是现代方法,但是如果你想一次加载所有项目,那么ListView类(docs)它会显示一个可垂直滚动的视图集合,其中每个视图都位于前一个视图的正下方在列表中。

因此,您的商品会立即加载,但不会被视为最新。

相关问题