10

ArrayAdapter が関連付けられた ListView があり、その内容をいくつかのアクティビティで表示します。残念ながら、設定の 1 つの ListView にすべての要素が表示されるのではなく、「プロパティ」が true に設定されていない要素だけが表示されることが必要になりました。異なるコンテンツで 2 つの ArrayAdapter を使用することは避けたいと思います。私はこのように試しました(このメソッドは、特定の要素を非表示にする設定で getView が呼び出されることを前提としています):

public View getView(int position, View convertView, Context context) {
....

    if(!arrayitems[position].isProperty()) { //arrayitems is the underlying array
        convertView.setVisibility(View.VISIBLE); 
    } 
    else {
        convertView.setVisibility(View.GONE); 
    }
    return convertView;
}

これは機能しますが、要素に isProperty == true がある場合は白い行が表示されます。もうスペースを占有しないという意味で、行を非表示にしたいと思います。それは可能ですか?

convertView に使用される xml ファイルは次のようになります。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/text_item_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="4dp"
            android:maxLines="1"
            android:ellipsize="none"
            android:textSize="12sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/text_item_status"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp"
            android:textStyle="bold" />

    </LinearLayout>

     <TextView android:id="@+id/text_item_text"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:textSize="12sp"
         android:maxLines="3"
         android:ellipsize="none" />

     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginTop="2dp"
         android:orientation="horizontal" >

         <TextView
             android:id="@+id/text_item_rating"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginRight="4dp"
             android:textSize="10sp" />

         <TextView
             android:id="@+id/text_item_voted"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textSize="10sp" />

     </LinearLayout>

</LinearLayout>

「fill_parent」ですべての android:layout_height="wrap_content" を再生しようとしましたが、何も変わりませんでした...

ありがとう!

4

6 に答える 6

4

Romainが意味したのは、LinearLayoutにIDを追加することでした

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:orientation="vertical"
    android:id="@+id/linear_layout">

次に、Javaで次のことを行います

    public View getView(int position, View convertView, Context context) {
    ....
    holder.lLayout = (LinearLayout) convertView.findViewById(R.id.linear_layout);
    ....
    if(!arrayitems[position].isProperty()) { //arrayitems is the underlying array
        holder.lLayout.setVisibility(View.VISIBLE); 
    } 
    else {
        holder.lLayout.setVisibility(View.GONE); 
    }
    return convertView;
    }

ビューを異なる方法で膨らませる場合は、少し変更する必要があるかもしれません。私はこれを自分でやったことがありますが、本当にうまくいきます。

于 2013-01-23T23:27:40.653 に答える
3

Android:layout_height="wrap_content" の getview レイアウトを使用し、Visibility gone を使用してレイアウトを非表示にすることができます

于 2012-11-30T13:50:09.470 に答える
1

別のユーザーが同じ問題を抱えていて、彼は次のように解決しました: https://stackoverflow.com/a/7928923/1548679 .

これがお役に立てば幸いです。

あいさつ

于 2012-11-30T13:43:08.253 に答える