Android: добавление нескольких видов в виджет приложения ListView - PullRequest
1 голос
/ 07 июля 2011

Я пытаюсь создать виджет домашнего экрана с помощью 3.1 SDK. Я следовал учебнику StackWidget . и изменил StackView на ListView. Я хочу добавить изображение и текст в каждую строку в моем списке, и они загружаются во время выполнения.

Я использую этот код в моем WidgetProvider.java классе

public RemoteViews getViewAt(int position) {

    Bitmap bitmap = ((BitmapDrawable)mWidgetItems.get(position).getImage());

    RemoteViews image = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);      
    image.setImageViewBitmap(R.id.widget_image, bitmap );

    RemoteViews text = new RemoteViews(mContext.getPackageName(), R.layout.widget_item); 
    text.setTextViewText(R.id.widget_text, mWidgetItems.get(position).getText());

    RemoteViews layout = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);

    Bundle extras = new Bundle();
    extras.putInt(StackWidgetProvider.EXTRA_ITEM, position);
    Intent fillInIntent = new Intent();
    fillInIntent.putExtras(extras);

    layout.setOnClickFillInIntent(R.id.widget_item, fillInIntent);

    return layout;
}

Все это работает правильно, когда я использую StackView, но изменение на ListView все портит. В результате получается

enter image description here

Может быть возвращен только один вид. Так что, если я добавлю следующий код, эта проблема возникает, если я не добавлю его, то содержимое списка будет пустым.

layout.addView(R.id.widget_item, image);
layout.addView(R.id.widget_item, text);

Как еще добавить несколько видов в виджет? Почему это работает для StackView, но не для ListView? и как мне это исправить?

Любая помощь очень ценится.

EDIT

widget_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<ImageView
    android:id="@+id/widget_image"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"/>
<TextView
    android:id="@+id/widget_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="20dp"
    android:layout_weight="1"
    android:textColor="#000000"/>       
</LinearLayout>

1 Ответ

1 голос
/ 07 июля 2011

Вы исправляете это, раздувая правильный макет с самого начала. У R.layout.widget_image уже должно быть то, что есть в R.layout.widget_image и R.layout.widget_item.

Это будет:

  • быстрее, чтобы выполнить (меньше инструкций для достижения того же визуального конца)
  • меньше кода Java
  • меньше кода макета (один файл макета против трех)
  • проще поддерживать код макета (вы можете использовать визуальный редактор в Eclipse, чтобы лучше поддерживать строки списка)

И, в качестве дополнительного бонуса, он должен работать для любого поддерживаемого AdapterView виджета приложения на основе.

...