2017-09-15 10 views
0

リストビューは、画面の最後にあるアイテムをスキップしています。セパレータはビューが想定されていたよりも厚いため、アダプタにアイテムが存在することを確認します。距離を上下にスクロールすると、このアイテムが表示されることがありますが、他のアイテムは消えます。ListView skippsビュー/アイテム

編集:arrayListの26個の項目のうち、インデックス6,13,20が欠落しています。 ListViewは、アクティビティによってアクセスされた唯一のビューです。

リストビュー項目

<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"/> 

のアダプタ

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="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" /> 

XMLのコード3210

+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);を追加するだけでした。