2017-02-08 1 views
1

Я использую GridView в своем app-widget. Я хочу установить текст по умолчанию для виджета приложения, когда нет данных. Я попытался использовать метод getLoadingView(), но он не работает.Как установить текст по умолчанию для виджета приложения, когда нет данных?

getLoadingViewMethod() из 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> 

Пожалуйста, предложите мне какое-то решение.

+0

Я думаю, что вы ищете метод 'RemoteViews # setEmptyView()', если я правильно вас пойму. Вы бы назвали это на основном 'RemoteViews' для вашего виджета. –

+0

@MikeM., Я читал о setEmptyView(). Но я не понимаю, где именно назвать этот метод? – Shruti

+0

В вашем «AppWidgetProvider», когда вы создаете «RemoteViews» с макетом с вашим «GridView». Вы бы назвали это на «RemoteViews». Вы захотите переместить 'txt_default_widget'' TextView' в этот макет тоже, кстати. –

ответ

2

AdapterView в App Widget используется очень похоже на один в местной компоновке вашего приложения. Чтобы отобразить определенный View, когда коллекция AdapterView пуста, вам необходимо установить View в качестве пустого View на AdapterView.

Для виджета RemoteViews класс имеет способ setEmptyView() для этого. Вы должны использовать этот метод в своем 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_widgetTextView, в данном случае - должны находиться в одной и той же основной раскладке как GridView, а не в макете элемента.

1

Вы можете установить пустой вид для своего адаптера.

View emptyView = LayoutInflater.from(yourContext).inflate(R.layout.xml_for_empty_view, null, false); 
yourAdapter.setEmptyView(emptyView); 
Смежные вопросы