2017-12-11 9 views
0

viewholders의 위치를 ​​내 recyclerview에 입력해야합니다. 기본적으로 사용자가 버튼을 클릭 할 때 편집 텍스트 필드가 비어 있으면 사용자는 계속 진행할 수 없습니다. 또한 각 편집 텍스트는 클래스의 설정자를 통해 설정됩니다. 이것은 모든 편집 텍스트의 밑줄을 제거하고 기본적으로 편집 할 수 없도록하기위한 것입니다.모든 뷰어 가져 오기 recyclerview

이 내 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); 

사용자가 버튼 있음을 클릭 할 때이입니다. 이 문제는 편집 텍스트가 onbindviewholder으로 설정되어 화면 외부의 viewholders에 대해 null을 반환한다는 것을 의미합니다. 이는 화면상의 편집 텍스트 만 설정된다는 것을 의미합니다. 나는 모든 편집 텍스트를 설정해야합니다. viewholdersrecyclerview 인 모든 제안 사항이 있으십니까?

 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); 

답변

0

RecyclerView의 점은 성능이 저하되고 화면에 표시 할 수 있습니다 만로드 항목으로는 동시에 모든 항목을 보유하지 않는다는 것입니다. 현대적인 접근 방식이지만 모든 항목을 한 번에로드하려면 클래스 (docs)입니다. 뷰의 세로 스크롤 가능한 컬렉션을 표시합니다. 각 뷰는 목록의 이전 뷰 바로 아래에 위치합니다.

그래서 항목은 한 번에로드되지만 최신 것으로 간주되지 않습니다.

+0

이미 구현 된 모든 항목이 있으므로 RecyclerView를 계속 사용하는 것이 좋습니다. 내가 가진 유일한 문제는 모든 편집 텍스트를 편집 할 수 없도록 만드는 것입니다. 나는 단추를 클릭 할 때마다 편집 텍스트를 비활성화하기 때문에 onbindviewholder에 플래그를 설정할 수 있음을 알고 있습니다. 그러나, 나는 모든 편집 텍스트가 채워지는지 확인하는 방법을 확신 할 수 없다. –