gpt4 book ai didi

android - appwidget listview 重复值

转载 作者:行者123 更新时间:2023-11-30 03:34:23 24 4
gpt4 key购买 nike

我知道我们在标准 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>

最佳答案

经过多次尝试和谷歌一个月的搜索,今天我找到了解决方案。在 ListView 中使用 ImageView 时,您应该在每次调用 getViewAt 时启动每个 ImageView 。我在每种情况下都调整了 imageview 选择,但忘记了初始化。在 getViewAt 中,我分配了一个没有内容的透明图像。问题解决了。

关于android - appwidget listview 重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16869726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com