2017-02-08 8 views
1

내 app-widget에서 GridView를 사용하고 있습니다. 데이터가 없을 때 app-widget에 기본 텍스트를 설정하고 싶습니다. getLoadingView() 메소드를 사용하여 시도했지만 작동하지 않습니다. WidgetViewsFactory.java의데이터가 없을 때 app 위젯에 기본 텍스트를 설정하는 방법은 무엇입니까?

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> 

나에게 몇 가지 솔루션을 제안 해주십시오.

+0

나는 당신을 올바르게 따라갈 때'RemoteViews # setEmptyView()'메소드를 찾고 있다고 생각한다. 당신은 당신의 위젯을위한'RemoteViews'에서 호출 할 것입니다. –

+0

@MikeM., setEmptyView()에 대해 읽었습니다. 그러나 나는이 방법을 정확히 어디에 호출 할지를 모르고있다. – Shruti

+0

'AppWidgetProvider'에서,'GridView' 레이아웃을 가진'RemoteViews'를 생성 할 때. 당신은'RemoteViews'에서 호출 할 것입니다. 'txt_default_widget''TextView'도 그 레이아웃으로 옮기고 싶을 것입니다, btw. –

답변

2

앱 위젯의 AdapterView은 앱의 로컬 레이아웃과 매우 유사하게 사용됩니다. AdapterView의 컬렉션이 비어있을 때 특정 View을 표시하려면 ViewAdapterView의 빈 View으로 설정해야합니다.

위젯의 경우 RemoteViews 클래스의 경우 setEmptyView() 메소드가 있습니다. 이 포함 된 레이아웃에서 기본 RemoteViews 개체를 만든 후 AppWidgetProvider에서이 방법을 사용합니다. 예를 들어 : - txt_default_widgetTextView,이 경우 - 오히려 항목 레이아웃보다는 GridView과 같은 주요 레이아웃에 있어야합니다

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

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

View가 있습니다.

1

어댑터에 대해 빈보기를 설정할 수 있습니다.

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