Использование ListView в виджете вызывает «Проблема загрузки виджета» - PullRequest
0 голосов
/ 19 мая 2019

В моем виджете я могу добавить адаптер с «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);
    }
}
...