我知道我们在标准Android应用程序中通过“ convertView”变量检查来处理“ Recycler”。有什么方法可以在小部件开发中处理它,因为RemoteAdaptersFactory具有方法getViewAt且该方法没有像convertView这样的参数。只是一个整数“位置”。注意:我正在使用layout:match_parent

我的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/xxxxx"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
    android:id="@+id/yyyy"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitXY" />

<TextView
    android:id="@+id/zzzzzzz"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:text="Aylik aktiviteler"
    android:textColor="#000000" />

<RelativeLayout
    android:id="@+id/bbbbb"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/aaaaaa" >

    <ListView
        android:id="@+id/cccccc"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="20dp"
        android:scrollingCache="false" >

    </ListView>

    <TextView
        android:id="@+id/dddddd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:visibility="gone" />

</RelativeLayout>

<Button
    android:id="@+id/aaaaa"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:text="+" />

</RelativeLayout>


服务代码:

package com.example.xxxxx;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.RemoteViews;
import android.widget.RemoteViewsService;

public class DorduncuWidgetService extends RemoteViewsService {

@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
    return new StackRemoteViewsFactory(this.getApplicationContext(), intent);
}


class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {

    private Context mContext;
    private int mAppWidgetId;


    private ActivitiesDataSource datasource;




    public StackRemoteViewsFactory(Context context, Intent intent) {

        mContext = context;
        mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);


        datasource = new ActivitiesDataSource(context);
        datasource.open();

        //getDBtoMyList working here

        datasource.close();

    }

    private int getResimID(int position) {

        if(position == 1)
            return R.drawable.resim1;
        if(position == 2)
            return R.drawable.resim2;
        if(position == 3)
            return R.drawable.resim3;

    }

    @Override
    public int getCount() {
        return 40;
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public RemoteViews getLoadingView() {
        return null;
    }
    @Override
    public RemoteViews getViewAt(int position) {

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

        satir.setTextViewText(R.id.ggggg, "" + gunler.get(position).substring(0, 2));


//If bla bla, set image this
        satir.setImageViewResource(R.id.imagexxxx,  getResimID(position);
//If bla2 bla2i set image that
        satir.setImageViewResource(R.id.imagexxxx,  getResimID(position);


        return satir;

    }
    @Override
    public int getViewTypeCount() {
        return 1;
    }
    @Override
    public boolean hasStableIds() {
        return true;
    }
    @Override
    public void onCreate() {

    }
    @Override
    public void onDataSetChanged() {

        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());

        harita.clear();
        gunler.clear();

        datasource = new ActivitiesDataSource(mContext);
        datasource.open();

        //getDBtoMyList working here

        datasource.close();

    }
    @Override
    public void onDestroy() {

    }


}
}


提供者代码:

package com.example.xxxxx;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.RemoteViews;

public class DorduncuWidgetProvider extends AppWidgetProvider {



@Override
public void onReceive(Context ctx, Intent intent) {

    final String action = intent.getAction();

    super.onReceive(ctx, intent);

}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    // Update each of the widgets with the remote adapter
    for (int i = 0; i < appWidgetIds.length; ++i) {
        RemoteViews layout = buildLayout(context, appWidgetIds[i]);
        appWidgetManager.updateAppWidget(appWidgetIds[i], layout);
    }

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.dorduncuwidget);
    Intent configIntent = new Intent(context, AddRecordActivity.class);
    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
    remoteViews.setOnClickPendingIntent(R.id.btnaylikekle, configPendingIntent);
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);

    super.onUpdate(context, appWidgetManager, appWidgetIds);
}

private RemoteViews buildLayout(Context context, int appWidgetId) {

    RemoteViews rv = null;
    final Intent intent = new Intent(context, DorduncuWidgetService.class);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
    rv = new RemoteViews(context.getPackageName(), R.layout.dorduncuwidget);
    rv.setRemoteAdapter(appWidgetId, R.id.cccccc, intent);

    rv.setEmptyView(R.id.cccccc, R.id.txtgone);

    return rv;
}

}


我的行布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal" >

<TextView
    android:id="@+id/ggggg"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingRight="10dp"
    android:text=" *    "
    android:textColor="#000000"
    android:textSize="20sp" />

<LinearLayout
    android:id="@+id/vvvvvv"
    android:layout_width="match_parent"
    android:layout_height="52dp"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imagexxxx"
        android:layout_width="50dp"
        android:layout_height="50dp" />

    <ImageView
        android:id="@+id/imagexxxx22"
        android:layout_width="50dp"
        android:layout_height="50dp" />

</LinearLayout>

</LinearLayout>

最佳答案

经过数次试用和一个月的Google搜索后,今天我找到了解决方案。在列表视图中使用imageviews时,应在每次getViewAt调用时启动每个imageview。我在每种情况下都对imageview进行了选择,但是却忘记了初始化。在getViewAt,我分配了一个没有内容的透明图像。问题解决了。

09-26 22:57