如何在没有数据时将默认文本设置为app小部件?

时间:2017-02-08 06:00:31

标签: android android-gridview android-appwidget

我在app-widget中使用GridView。我想在没有数据的情况下为app-widget设置默认文本。我尝试使用getLoadingView()方法,但它无法正常工作。

WidgetViewsFactory.java的getLoadingViewMethod():

@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>

请建议我解决一下。

2 个答案:

答案 0 :(得分:2)

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

对于Widget,AppWidgetProvider类具有RemoteViews方法。在包含GridView的布局中创建主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 select c.customer ,d.txn_date ,coalesce(t.tag,0) as tag from (select date_add (from_date,i) as txn_date from (select date '2017-01-01' as from_date ,date '2017-01-05' as to_date ) p lateral view posexplode(split(space(datediff(p.to_date,p.from_date)),' ')) pe as i,x ) d cross join (select distinct customer from t ) c left join t on t.customer = c.customer and t.txn_date = d.txn_date ; (在本例中)必须与c.customer d.txn_date tag A 2017-01-01 1 A 2017-01-02 1 A 2017-01-03 0 A 2017-01-04 1 A 2017-01-05 0 B 2017-01-01 0 B 2017-01-02 0 B 2017-01-03 1 B 2017-01-04 0 B 2017-01-05 0 位于同一主布局中,而不是在项目中布局。

答案 1 :(得分:1)

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

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