在Xamarin的小部件中使用ViewFlipper

本文关键字:ViewFlipper Xamarin 小部 | 更新日期: 2023-09-27 18:13:06

我正在构建一个有几页信息的小部件。一次只显示一个页面,当用户点击小部件时,将显示下一个页面。我想通过使用ViewFlipper来创建这个功能,但是我找不到任何关于如何为小部件实现它的文档。

这是骨架代码,我正在使用,而试图让ViewFlipper工作。

我有一个小部件(divisionrankings),它的内容插入到布局(mainLayout)与服务(UpdateService)。

当运行小部件时,我最初看到header1的文本按预期设置为"Updated Header"。然而,触摸小部件没有任何作用。

[BroadcastReceiver (Label = "aaWdiget")]
[IntentFilter (new string [] { "android.appwidget.action.APPWIDGET_UPDATE" })]
[MetaData ("android.appwidget.provider", Resource = "@xml/divisionstandings")]
public class DivisionStandings : AppWidgetProvider
{
    public override void OnUpdate (Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
    {
    context.StartService (new Intent (context, typeof (UpdateService)));
    }
}

[Service]
public class UpdateService : Service
{
    public override void OnStart (Intent intent, int startId)
    {
        RemoteViews mainView= new RemoteViews (this.PackageName, Resource.Layout.mainLayout);;
        ComponentName thisWidget = new ComponentName (this,  "mlbstandings.DivisionStandings");
        AppWidgetManager manager = AppWidgetManager.GetInstance (this);
       mainView.SetTextViewText(Resource.Id.header1, "Updated Header");
        ViewFlipper flipper = (ViewFlipper)Resource.Id.viewFlipper1;
        flipper.Touch += (object sender, View.TouchEventArgs e) => { 
            flipper.ShowNext(); 
        };
        manager.UpdateAppWidget (thisWidget, mainView);
    }

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout" >
    <ViewFlipper
        android:id="@+id/viewFlipper1">
        <TextView
            android:id="@+id/header1"
            android:text="---Header" />
        <TextView
            android:id="@+id/header2"
            android:text="Other Header" />       
    </ViewFlipper>
</LinearLayout>

在Xamarin的小部件中使用ViewFlipper

问题可能在ViewFlipper flipper = (ViewFlipper)Resource.Id.viewFlipper1;"Resource.Id。viewFlipper1'是int不是ViewFlipper

所以你需要像这样获取viewbyid:

ViewFlipper flipper = mainView.FindViewById<ViewFlipper> (Resource.Id.viewFlipper1)

因为看起来没有方法可以直接访问视图,所以您需要使用mainView.SetOnClickPendingIntent,然后在OnRecive()方法中执行操作。

下面是Java的更多信息