Android AppWidget AdapterViewLipper不处理项目单击
我已经用AdapterViewLipper创建了简单的appwidget。显示数据和翻转操作正常工作,但如果我想处理项目单击操作,则此操作不起作用。但若我在xml布局中更改ListView上的AdapterViewLipper,操作单击项将正常工作 使用小部件提供程序初始化Android AppWidget AdapterViewLipper不处理项目单击,android,android-widget,Android,Android Widget,我已经用AdapterViewLipper创建了简单的appwidget。显示数据和翻转操作正常工作,但如果我想处理项目单击操作,则此操作不起作用。但若我在xml布局中更改ListView上的AdapterViewLipper,操作单击项将正常工作 使用小部件提供程序初始化 public class KidChildrenAdaperViewFlipperWidget extends AppWidgetProvider { public static final String WIDGET_A
public class KidChildrenAdaperViewFlipperWidget extends AppWidgetProvider {
public static final String WIDGET_ACTION = "WIDGET_ACTION";
public static final String ACTION_NEXT = ".ACTION_NEXT";
public static final String ACTION_PREVIOUS = "ACTION_PREVIOUS";
private static final String ACTION = "ACTION";
public static final String TAG = "KidChildrenListWidget";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Bundle extras = intent.getExtras();
String actionButton = (String) (extras == null ? null : extras.get(ACTION));
if (action.equals(KidChildrenAdaperViewFlipperWidget.WIDGET_ACTION)){
Toast.makeText(context, "Kliknięto: ", Toast.LENGTH_SHORT).show();
}
if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action) && actionButton != null) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_view_flipper_children);
switch (actionButton) {
case ACTION_NEXT: {
remoteViews.showNext(R.id.advKidWidgetChildren);
}
break;
case ACTION_PREVIOUS: {
remoteViews.showPrevious(R.id.advKidWidgetChildren);
}
break;
}
int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, 0);
AppWidgetManager.getInstance(context).updateAppWidget(widgetId, remoteViews);
}else {
super.onReceive(context, intent);
}
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int i = 0; i < appWidgetIds.length; i++) {
Intent widgetIntent = new Intent(context, WidgetChildAdapterViewFlipperService.class);
widgetIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
widgetIntent.setData(Uri.parse(widgetIntent.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_view_flipper_children);
remoteViews.setRemoteAdapter(R.id.advKidWidgetChildren, widgetIntent);
remoteViews.setEmptyView(R.id.advKidWidgetChildren, R.id.tvKidWidgetEmptyView);
Intent activityIntent = new Intent(context, KidChildrenAdaperViewFlipperWidget.class);
// Set the action for the intent.
// When the user touches a particular view, it will have the effect of
// broadcasting WIDGET_ACTION.
activityIntent.setAction(WIDGET_ACTION);
activityIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
widgetIntent.setData(Uri.parse(widgetIntent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent toastPendingIntent = PendingIntent.getBroadcast(context, 0, activityIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setPendingIntentTemplate(R.id.advKidWidgetChildren, toastPendingIntent);
Intent previousIntent = new Intent(context, KidChildrenAdaperViewFlipperWidget.class);
previousIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
previousIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
previousIntent.putExtra(ACTION, ACTION_PREVIOUS);
PendingIntent previousPendingIntent = PendingIntent.getBroadcast(context, 1, previousIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.ivWVFCPrevious, previousPendingIntent);
Intent nextIntent = new Intent(context, KidChildrenAdaperViewFlipperWidget.class);
nextIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
nextIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
nextIntent.putExtra(ACTION, ACTION_NEXT);
PendingIntent nextPendingIntent = PendingIntent.getBroadcast(context, 2, nextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.ivWVFCNext, nextPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
Log.d(TAG, "Zakutalizowano widget");
}
公共类KidChildrenAdaperViewFlipperWidget扩展了AppWidgetProvider{
公共静态最终字符串WIDGET\u ACTION=“WIDGET\u ACTION”;
公共静态最终字符串ACTION_NEXT=“.ACTION_NEXT”;
公共静态最终字符串ACTION\u PREVIOUS=“ACTION\u PREVIOUS”;
私有静态最终字符串ACTION=“ACTION”;
公共静态最终字符串标记=“KidChildrenListWidget”;
@凌驾
公共void onReceive(上下文、意图){
String action=intent.getAction();
Bundle extras=intent.getExtras();
字符串actionButton=(字符串)(extras==null?null:extras.get(ACTION));
if(action.equals(KidChildrenAdaperViewFlipperWidget.WIDGET_action)){
Toast.makeText(上下文,“Kliknięto:”,Toast.LENGTHęu SHORT.show();
}
if(AppWidgetManager.ACTION\u APPWIDGET\u UPDATE.equals(ACTION)&&actionButton!=null){
RemoteViews RemoteViews=新的RemoteView(context.getPackageName(),R.layout.widget\u view\u flipper\u子项);
开关(操作按钮){
下一步行动:{
RemoteView.showNext(R.id.advKidWidgetChildren);
}
打破
以前的案件行动:{
RemoteView.showPrevious(R.id.advKidWidgetChildren);
}
打破
}
int widgetId=extras.getInt(AppWidgetManager.EXTRA\u APPWIDGET\u ID,0);
AppWidgetManager.getInstance(上下文).UpdateAppWidgetId(widgetId,RemoteView);
}否则{
super.onReceive(上下文、意图);
}
}
@凌驾
公共void onUpdate(上下文上下文,AppWidgetManager AppWidgetManager,int[]AppWidgetId){
for(int i=0;i
}
使用小部件服务初始化
public class WidgetChildAdapterViewFlipperService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new WidgetFactoryADV(this.getApplicationContext(), intent);
}
public class WidgetFactoryADV implements RemoteViewsFactory {
private Context context;
private int appWidgetId;
private KidDatabaseManager kidDatabaseManager;
private List<ChildObject> childObjectList;
public WidgetFactoryADV(Context context, Intent intent ) {
this.context = context;
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
@Override
public void onCreate() {
kidDatabaseManager = new KidDatabaseManager(context);
childObjectList = kidDatabaseManager.getChildren(((ApplicationController) context.getApplicationContext()).getUser(context).getId());
}
@Override
public void onDataSetChanged() {
childObjectList = kidDatabaseManager.getChildren(((ApplicationController) context.getApplicationContext()).getUser(context).getId());
for (int i=0; i<childObjectList.size(); i++){
getViewAt(i);
}
}
@Override
public void onDestroy() {
}
@Override
public int getCount() {
return childObjectList.size();
}
@Override
public RemoteViews getViewAt(int i) {
ChildObject childObject = childObjectList.get(i);
RemoteViews widgetRow = new RemoteViews(context.getPackageName(), R.layout.widget_children_adv_item);
widgetRow.setTextViewText(R.id.tvWidgetItemChildName, childObject.getName());
String sdf = new SimpleDateFormat("yy.MM.dd HH:mm:ss").format(new Date(childObject.getPositionCreatedAt() * 1000));
widgetRow.setTextViewText(R.id.tvWidgetItemChildPositionTime, Html.fromHtml(String.format(getString(R.string.last_position),
sdf)));
Address address = Utils.getAddress(context, childObject.getLatitude(), childObject.getLongitude());
if (address != null) {
String thoroughfare = address.getThoroughfare() == null ? "" : address.getThoroughfare();
String localiyty = address.getLocality() == null ? "" : (", " + address.getLocality());
String featureName = address.getFeatureName() == null ? "" : (" " + address.getFeatureName());
widgetRow.setTextViewText(R.id.tvWidgetItemAddress, thoroughfare + featureName + localiyty);
}
widgetRow.setTextViewText(R.id.tvWidgetItemAccuracy, ChildUtil.getAccuracyIndicator(context, childObject.getAccuracy()));
ChildUtil.setActivityIconForRemoteView(context, widgetRow, childObject.getActivity());
widgetRow.setTextViewText(R.id.tvWidgetItemBattery, childObject.getBattery() + " %");
Intent widgetIntent = new Intent();
Bundle widgetBundle = new Bundle();
widgetBundle.putInt("index", i);
widgetIntent.putExtras(widgetBundle);
widgetRow.setOnClickFillInIntent(R.id.rlWidgetADVItem, widgetIntent);
return widgetRow;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return childObjectList.size();
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public boolean hasStableIds() {
return true;
}
}
公共类WidgetChildAdapterServiceWFLipperService扩展了RemoteViewsService{
@凌驾
公共远程视图工厂onGetViewFactory(意图){
返回新的WidgetFactoryADV(this.getApplicationContext(),intent);
}
公共类WidgetFactoryADV实现RemoteViewsFactory{
私人语境;
私有int-appWidgetId;
私人KidDatabaseManager KidDatabaseManager;
私有列表childObjectList;
公共WidgetFactoryADV(上下文、意图){
this.context=上下文;
appWidgetId=intent.getIntExtra(AppWidgetManager.EXTRA\u APPWIDGET\u ID,
AppWidgetManager。无效的\u APPWIDGET\u ID);
}
@凌驾
public void onCreate(){
kidDatabaseManager=新的kidDatabaseManager(上下文);
childObjectList=kidDatabaseManager.getChildren(((ApplicationController)context.getApplicationContext()).getUser(context.getId());
}
@凌驾
公共无效onDataSetChanged(){
childObjectList=kidDatabaseManager.getChildren(((ApplicationController)context.getApplicationContext()).getUser(context.getId());
对于(int i=0;iHi-David,您的问题解决了吗?请回答?不幸的是,没有。我尝试了许多不同的方法来解决此问题,但没有结果。将来,我将再次尝试Avid,我通过在单元格项的子项上设置fillInClickEvent来解决此问题。如果您在根视图上应用fillInClickEvent,则它将