2017-09-15 11 views
0

ListView가 화면의 끝 부분에있는 항목을 건너 뜁니다. 구분자가보기가 있어야하는 위치가 두꺼 웠기 때문에 항목이 어댑터에 있다고 확신합니다. 거리를 위아래로 스크롤 할 때이 항목이 가끔 표시되지만 다른 항목은 사라집니다.ListView skipps보기/항목

편집 : arrayList의 26 개 항목 중 인덱스 6, 13 및 20이 누락되었습니다. ListView는 활동에서 액세스 한 유일한보기입니다. ListView에의 어댑터의

코드

private class LessonAdapter extends ArrayAdapter<Item> { 

    LessonAdapter(Activity context, ArrayList<Item> list) { 
     super(context, 0, list); 
     if (BuildConfig.DEBUG) Log.v(LOG_TAG, "LessonAdapter() entered"); 
    } 

    @NonNull 
    @Override 
    public View getView(int position, View listItemView, @NonNull ViewGroup parent) { 
     if (BuildConfig.DEBUG) Log.v(LOG_TAG, "getView() entered"); 
     if (listItemView == null) 
      listItemView = LayoutInflater.from(getContext()).inflate(
        R.layout.lesson_list_item, null, true); 

     final Item item = getItem(position); 
     final TextView textView1 = listItemView.findViewById(R.id.lesson_item_body); 
     final View progressBar = listItemView.findViewById(R.id.lesson_list_progress_bar); 

     if (position > 0) { 
      textView1.setVisibility(View.GONE); 
      textView1.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View view) { 
        textView1.setVisibility(View.GONE); 
        return false; 
       } 
      }); 
     } 

     Timber.v("mHeader = " + item.mHeader); 
     Timber.i("height = " + listItemView.getMeasuredHeightAndState()); 

     TextView textView = listItemView.findViewById(R.id.lesson_item_header_text); 
     View view = listItemView.findViewById(R.id.lesson_item_header_layout); 
     if (item.mHeader == null || item.mHeader.equals("")) 
      view.setVisibility(View.GONE); 
     else { 
      textView.setText(Html.fromHtml(item.mHeader)); 
      view.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        if (textView1.getVisibility() == View.GONE) { 
         progressBar.setVisibility(View.VISIBLE); 
         textView1.post(new Runnable() { 
          public void run() { 
           Timber.v("mText = " + item.mText); 
           textView1.setText(Html.fromHtml(item.mText)); 
           progressBar.setVisibility(View.GONE); 
           textView1.setVisibility(View.VISIBLE); 
          } 
         }); 
        } else textView1.setVisibility(View.GONE); 
       } 
      }); 
     } 

     return listItemView; 
    } 
} 

XML 목록보기 항목

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:id="@+id/lesson_item"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:id="@+id/lesson_item_header_layout"> 

<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:minHeight="50dp" 
    android:layout_weight="1" 
    android:id="@+id/lesson_item_header_text" 
    android:layout_marginTop="8dp" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="8dp" 
    android:textAppearance="?android:textAppearanceMedium" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_action_drop_down" 
     android:padding="8dp" 
     android:layout_gravity="center_vertical" 
     android:contentDescription="@string/drop_down" /> 

</LinearLayout> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/lesson_item_body" 
    android:paddingLeft="4dp" 
    android:paddingRight="4dp" 
    android:textAppearance="?android:textAppearanceMedium" 
    /> 

<ProgressBar 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:id="@+id/lesson_list_progress_bar" 
    android:visibility="gone"/> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_margin="16dp" 
android:orientation="vertical"> 

<ScrollView 
    android:id="@+id/lesson_scroll" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:visibility="gone"> 

    <TextView 
     android:id="@+id/lesson" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="@style/TextAppearance.AppCompat.Medium" /> 

</ScrollView> 

<WebView 
    android:id="@+id/web_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:visibility="gone" /> 

<ListView 
    android:id="@+id/lesson_list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollingCache="true" 
    android:visibility="gone" /> 

XML3210

+2

많은 것들이 눈에 띄지 않게되거나 스크롤 뷰가 너무 커져서 전체 레이아웃을 덮을 수 있습니다. 부모 레이아웃을 RelativeLayout으로 변경하거나 목록보기를 제외한 모든 항목을 제거하여 모든 항목이 실제로 있는지 확인하려고합니다. 또는 아니요 –

+0

목록보기 만 표시되고 26 개의보기 중 3-4 개만 누락되었습니다. –

+0

보기를 표시하는 활동 코드가 궁금합니다.이 문제의 원인이 있거나 목록보기에서 fill_parent 대신 match_parent를 시도해야합니다. –

답변

0

알아 냈어.

if (item.mHeader == null || item.mHeader.equals("")) 
     view.setVisibility(View.GONE); 
    else { 
     textView.setText(Html.fromHtml(item.mHeader)); 
     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (textView1.getVisibility() == View.GONE) { 
        progressBar.setVisibility(View.VISIBLE); 
        textView1.post(new Runnable() { 
         public void run() { 
          Timber.v("mText = " + item.mText); 
          textView1.setText(Html.fromHtml(item.mText)); 
          progressBar.setVisibility(View.GONE); 
          textView1.setVisibility(View.VISIBLE); 
         } 
        }); 
       } else textView1.setVisibility(View.GONE); 
      } 
     }); 
    } 

item.mHeader가 null 또는 빈 문자열 인 경우, View view = listItemView.findViewById(R.id.lesson_item_header_layout);의 가시성이 사라로 설정되어 나열합니다. 보기를 재활용하면 가시성이 무시됩니다. 나중에 다른보기가로드되어 전체 목록보기 항목이 사라집니다. else 문에 view.setVisibility(View.GONE);을 추가하기 만하면됩니다.