1

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すべてが台無しになります。その結果がこれ

ここに画像の説明を入力

返されるビューは 1 つだけです。したがって、次のコードを追加するとこの問題が発生し、追加しないとリストの内容が空になります。

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

複数のビューをウィジェットに追加するにはどうすればよいですか? これが StackView では機能するのに ListView では機能しないのはなぜですか? どうすればこれを修正できますか?

どんな助けでも大歓迎です。

編集

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>
4

1 に答える 1

1

最初から適切なレイアウトを膨らませることで、これを修正します。とR.layout.widget_imageにあるものはすべて既にあるはずです。R.layout.widget_imageR.layout.widget_item

これは次のようになります:

  • 実行速度が速い (同じ視覚的目的を達成するための命令が少ない)
  • より少ない Java コード
  • 少ないレイアウト コード (1 つのレイアウト ファイル対 3 つ)
  • レイアウト コードの保守が容易 (Eclipse のビジュアル エディターを使用して、リストの行をより適切に保守できます)

さらに、おまけとして、サポートされているAdapterViewベースのアプリ ウィジェットで動作するはずです。

于 2011-07-07T12:16:09.770 に答える