Android AppWidget 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

我已经用AdapterViewLipper创建了简单的appwidget。显示数据和翻转操作正常工作,但如果我想处理项目单击操作,则此操作不起作用。但若我在xml布局中更改ListView上的AdapterViewLipper,操作单击项将正常工作

使用小部件提供程序初始化

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,则它将