web-dev-qa-db-ja.com

Android:空のビューをリストビューに設定する

 <TextView
            Android:id="@Android:id/empty"
            style="@style/FacebookFont"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:gravity="center_horizontal"
            Android:text="@string/no_result_found"
            Android:textColor="@color/white" />

これは空のビューのxmlコードです。次のように空のビューを設定しています:

    list.setAdapter(adapter);
    list.setEmptyView(findViewById(Android.R.id.empty));

それでもアイテムがリストビューにある場合は、リストビューにデータが入力される前でも、空のビューが表示されます。 listviewにアイテムが含まれているときに、その空のビューを表示したくありません。

助けてください。

16
user2159624

ListActivityを使用している場合は、空のビューを手動で設定する必要はありません。コードからlist.setEmptyView(findViewById(Android.R.id.empty));を削除します。

以下のようにレイアウトを変更すると、リストに項目がない場合は自動的にEmptyViewが追加されます。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:orientation="vertical"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:paddingLeft="8dp"
        Android:paddingRight="8dp">

    <ListView Android:id="@Android:id/list"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:background="#00FF00"
            Android:layout_weight="1"
            Android:drawSelectorOnTop="false"/>

     <TextView Android:id="@Android:id/empty"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:background="#FF0000"
            Android:text="No data"/>

</LinearLayout>
14
Dhaval Parmar

MainActivityListActivityを拡張していない場合は、アダプターを設定する前に空のビューを設定する必要があります。

これを試して

list.setEmptyView(findViewById(Android.R.id.empty));
list.setAdapter(adapter);

返事遅れてすみません!

代替方法:ListActivityからアクティビティを拡張します。そして、textviewをID Android.R.id.emptyのリストレイアウトに追加します

11
VenoM

これを試して

    View view = getLayoutInflater() .inflate(<resource id of the empty view>, null);
    ViewGroup viewGroup= ( ViewGroup)list.getParent();
    viewGroup.addView(view);
    list.setEmptyView(view); 
    list.setAdapter(adapter);
5
Chris

正解はいくつかありますが、これは私が見つけた最良のアプローチだと思います。

View emptyView = getLayoutInflater().inflate(R.layout.empty_list_cart, null);
addContentView(emptyView, listView.getLayoutParams()); // You're using the same params as listView
listView.setEmptyView(emptyView);
listView.setAdapter(adapter);
5
cesards

@dhawalSodhaParmarが説明したことは何でも正しい。しかし、答えの言い方を見ると混乱があります。

    <?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context=".SampleActivity">

    <ListView
        Android:id="@+id/list"
        Android:orientation="vertical"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:paddingBottom="@dimen/activity_vertical_margin"
        Android:paddingLeft="@dimen/activity_horizontal_margin"
        Android:paddingRight="@dimen/activity_horizontal_margin"
        Android:paddingTop="@dimen/activity_vertical_margin"
        Android:divider="@null"
        Android:dividerHeight="0dp" />

    <!-- Empty view is only visible when the list has no items. -->
    <TextView
        Android:id="@+id/empty_text_view"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerInParent="true"
        Android:text="NO DOCUMENTS AVAILABLE!"
        Android:textColor="#525252"
        Android:textAppearance="?android:textAppearanceMedium"
        Android:visibility="gone"/>

</RelativeLayout>

すでにリストビューと、データを使用して同じものをサポートするアダプターがあるとします。すべてが正常に機能している場合、この空のリストビュー画面を実装したい人は、以下のように開始する必要があります。ステップ1:リストビューを含む既存のアクティビティXMLファイルを、ここで使用したもので変更します。線形レイアウトまたは相対レイアウトのいずれかを使用できますが、柔軟性のため、相対レイアウトを使用することをお勧めします。そして私が書いたようなtextView。

ステップ2:アクティビティJava=ファイルに移動し、setContentViewの後に

ListView emptyListView = (ListView) findViewById(R.id.list);
// set your adapter here
// set your click listener here
// or whatever else
emptyListView.setEmptyView(findViewById(R.id.empty_text_view));

これで完了です。実行すると、設定が完了します。

0
Arjun Kalidas