没有数据时如何为应用程序小部件设置默认文本?

How to set a default text to app widget when there is no data?

我在我的应用程序小部件中使用 GridView。我想在没有数据时为应用程序小部件设置默认文本。我尝试使用 getLoadingView() 方法,但它不起作用。

getLoadingViewMethod() of WidgetViewsFactory.java:

@Override
public RemoteViews getLoadingView() {

    Log.e("textview is displayed","true");
    RemoteViews row = new RemoteViews(mContext.getPackageName(), R.layout.widget_default_display);
    row.setTextViewText(R.id.txt_default_widget,"DEFAULT TEXT");
    return row;
}    

widget_default_display.xml:

<?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="180dp">

    <TextView
        android:id="@+id/txt_default_widget"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/no_notifications"
        android:textColor="@color/txt_sub_title_gray"
        android:textSize="@dimen/txt_title_size"/>

</LinearLayout>

请给我一些解决方案。

您可以为您的适配器设置空视图。

View emptyView = LayoutInflater.from(yourContext).inflate(R.layout.xml_for_empty_view, null, false);
yourAdapter.setEmptyView(emptyView);

应用小部件中的 AdapterView 与您应用的本地布局中的使用非常相似。要在AdapterView的集合为空时显示某个View,您需要将View设置为AdapterView上的空View

对于 Widget,RemoteViews class 有 setEmptyView() 方法。从包含您的 GridView 的布局创建主 RemoteViews 对象后,您将在 AppWidgetProvider 中使用此方法。例如:

RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
...

rv.setEmptyView(R.id.grid_view, R.id.txt_default_widget);

请注意,空 View - txt_default_widget TextView,在本例中 - 必须与 GridView 在同一主布局中,而不是在项目布局。