В моем виджете я могу добавить адаптер с «LinearLayout» в качестве строки в «LinearLayout» xml-файла виджетов, но при добавлении его в «ListView» виджет не может быть загружен.
Если я закомментирую
remoteViews.addView(R.id.widget_LinearLayout_viewContainer, remoteViewsAdapter);
нет содержимого (конечно), но оно отображается правильно.
По моему мнению, "LinearLayout" должен быть добавлен к "ListView" (или я ошибаюсь?). Хуже всего то, что logcat ничего не говорит.
Widget.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_LinearLayout_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorBlack"
android:orientation="vertical">
<!-- using ListView here causes "Problem loading widget" -->
<LinearLayout
android:id="@+id/widget_LinearLayout_viewContainer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<TextView
android:id="@+id/widget_TextView_emptyList"
style="@android:style/TextAppearance.Small"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="2dip"
android:gravity="center_horizontal|center_vertical"
android:text="@string/widget_TextView_NoData"
android:textColor="@color/colorGrayLight" />
</LinearLayout>
Widget_Adapter.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_marginLeft="2sp"
android:layout_marginRight="2sp"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/widget_adapter_TextView_headline"
android:textStyle="bold"
android:maxLines="1"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
<TextView
android:id="@+id/widget_adapter_TextView_info"
android:maxLines="1"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
</LinearLayout>
Widget.java
public class Widget extends AppWidgetProvider {
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
... // fetching data to cursor here (no errors)
// create view
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
if (cursor.getCount() == 0) {
// no data, so hide ListView in XML
remoteViews.setViewVisibility(R.id.widget_LinearLayout_viewContainer, View.GONE);
} else {
// there are entries, so hide TextView "currently no data" in XML
remoteViews.setViewVisibility(R.id.widget_TextView_emptyList, View.GONE);
cursor.moveToFirst();
do {
// create new view for date-item from widget_list_item.xml
RemoteViews remoteViewsAdapter = new RemoteViews(context.getPackageName(), R.layout.widget_adapter);
// get current dataset
MainActivityAdapter mainActivityAdapter = new MainActivityAdapter(context, cursor, sqLiteDatabase);
String itemInfo = mainActivityAdapter.getItemInfo(cursor.getPosition());
//set text
remoteViewsAdapter.setTextViewText(R.id.widget_adapter_TextView_headline, cursor.getString(cursor.getColumnIndex(Database.COL_NAME)));
remoteViewsAdapter.setTextViewText(R.id.widget_adapter_TextView_info, itemInfo);
// ERROR? uncomment addView displays correct, but empty (of course)
// Works with LinearLayout, but not with ListView
remoteViews.addView(R.id.widget_LinearLayout_viewContainer, remoteViewsAdapter);
} while (cursor.moveToNext());
}
cursor.close();
database.close();
// Trigger widget update
AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, Widget.class), remoteViews);
}
}