0

カスタムビューのリストを完全にロードして実行しているホームスクリーンウィジェットがあります。データはカスタム バックエンドから供給され、カスタム ウィジェット ボタンで更新すると、新しいアイテムがウィジェットのリストに適切に反映されます。

私が気づいたことの 1 つは、ホームスクリーン ウィジェットがウィジェット (ビュー) をサポートしていないことです。欠けていることに気付いた 1 つの領域は、ViewHolder パターンを実装できなかったという点で ListViews に関するものでした。主な問題は、getViewAt() メソッドは、getView() メソッドで convertView も提供する通常の ListAdapter とは異なり、位置をパラメーターとして提供するだけであるということです。RemoveViewFactory クラスの例を以下に示します。

class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
    private static final int mCount = 10;
    private List<WidgetItem> mWidgetItems = new ArrayList<WidgetItem>();
    private Context mContext;
    private int mAppWidgetId;

    public StackRemoteViewsFactory(Context context, Intent intent) {
        mContext = context;
        mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
            AppWidgetManager.INVALID_APPWIDGET_ID);
    }

    ...
    public RemoteViews getViewAt(int position) {   
        // Construct a remote views item based on the app widget item XML file, 
        // and set the text based on the position.
        RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.widget_item);
        rv.setTextViewText(R.id.widget_item, mWidgetItems.get(position).text);

        ...
        // Return the remote views object.
        return rv;
    }
}

ホームスクリーン ウィジェットと RemoteViews でこのパターンを実装する方法はありますか?

4

1 に答える 1