我知道我们在标准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,我分配了一个没有内容的透明图像。问题解决了。