【问题标题】:Don't show image in imageview in gridview on appwidget不要在 appwidget 上的 gridview 中的 imageview 中显示图像
【发布时间】:2014-01-02 12:12:36
【问题描述】:

我正在为我的 android 应用程序创建我的第一个小部件,我的小部件由一个 gridview 组成,但在显示配置窗口并保存后,该小部件不会在 gridview 中显示图片并在每个图像中显示“正在加载...”。

我做错了什么?

我的应用程序提供者“Widget.java”

 @Override
public void onUpdate(Context context,
                     AppWidgetManager appWidgetManager,
                     int[] appWidgetIds) {

    for (int i = 0; i < appWidgetIds.length; i++) {

        RemoteViews remoteViews = updateWidgetGridView(context, appWidgetIds[i]);
        appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
        appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds[i], R.id.gridView);
    }
    super.onUpdate(context, appWidgetManager, appWidgetIds);
}

private RemoteViews updateWidgetGridView(Context context, int appWidgetId) {
    //which layout to show on widget
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);

    //RemoteViews Service needed to provide adapter for ListView
    Intent svcIntent = new Intent(context, WidgetService.class);
    //passing app widget id to that RemoteViews Service
    svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    //setting a unique Uri to the intent
    //don't know its purpose to me right now
    svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
    //setting adapter to listview of the widget
    //remoteViews.setRemoteAdapter(appWidgetId, R.id.gridView, svcIntent);
    remoteViews.setRemoteAdapter(R.id.gridView,svcIntent);

    return remoteViews;
}

RemoteView 服务“WidgetServices.java”

public class WidgetService extends RemoteViewsService {
    @Override
    public RemoteViewsService.RemoteViewsFactory onGetViewFactory(Intent intent) {
        int appWidgetId = intent.getIntExtra(
                AppWidgetManager.EXTRA_APPWIDGET_ID,
                AppWidgetManager.INVALID_APPWIDGET_ID);

        try {
            return (new ListProvider(this.getApplicationContext(), intent));
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }
}

我的适配器提供程序“ListProvider.java”

public class ListProvider implements RemoteViewsService.RemoteViewsFactory {
    private ArrayList<Pictograma> listItemList = new ArrayList<Pictograma>();
    private Context context = null;
    //private Context sharedContext
    private File dir;
    private int appWidgetId;

    public ListProvider(Context context, Intent intent) throws PackageManager.NameNotFoundException {
        this.context = context;
        this.appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                AppWidgetManager.INVALID_APPWIDGET_ID);

        populateListItem();
    }

    private void populateListItem() throws PackageManager.NameNotFoundException {
        GestionBD db;
        Pictograma pic;
        SharedPreferences prefs;

        prefs = context.getSharedPreferences("picWidgetCFG", Context.MODE_PRIVATE);
        String ids[] = prefs.getString("pic_" + this.appWidgetId, "").split(",");

        Context sharedContext = context.createPackageContext(Utilidades.APP_PICCOM, Context.CONTEXT_INCLUDE_CODE);
        this.dir = sharedContext.getDir("imgPictogramas", Context.MODE_PRIVATE);

        db = new GestionBD(context);

        for (String id : ids){
            pic = db.getPictograma(Integer.parseInt(id));
            listItemList.add(pic);
        }
    }

    @Override
    public void onCreate() {

    }

    @Override
    public void onDataSetChanged() {

    }

    @Override
    public void onDestroy() {

    }

    @Override
    public int getCount() {
        return listItemList.size();
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    /*
    *Similar to getView of Adapter where instead of View
    *we return RemoteViews
    *
    */
    @Override
    public RemoteViews getViewAt(int position) {
        final RemoteViews remoteView = new RemoteViews(
                context.getPackageName(), R.layout.elementopiccomfrase);
        Pictograma listItem = listItemList.get(position);
        remoteView.setTextViewText(R.id.textoPicElemento, listItem.getNombre());

        //remoteView.setBitmap(R.id.imgPicElemento,"setImageBitmap", BitmapFactory.decodeFile(dir.getAbsolutePath() + "/" + listItemList.get(position).getImagen()));
        remoteView.setImageViewBitmap(R.id.imgPicElemento,BitmapFactory.decodeFile(dir.getAbsolutePath() + "/" + listItemList.get(position).getImagen()));


        return remoteView;
    }

    @Override
    public RemoteViews getLoadingView() {
        return null;
    }

    @Override
    public int getViewTypeCount() {
        return 0;
    }
}

【问题讨论】:

    标签: android android-widget widget android-appwidget


    【解决方案1】:

    快速浏览。您的适配器在 getViewTypeCount() 中返回 0。这似乎不对。

    【讨论】:

    • 嗨,这段代码是我需要的复制/粘贴和重新编码,但我认为这不是问题,因为在小部件中如果我配置了 3 张图片,那么小部件会显示 3“正在加载。 ..”消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多