【问题标题】:Using ViewFlipper in a widget with Xamarin在带有 Xamarin 的小部件中使用 ViewFlipper
【发布时间】:2014-07-14 19:06:28
【问题描述】:

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

这是我在尝试让 ViewFlipper 工作时使用的框架代码。

我有一个小部件 (DivisionStandings ),它通过服务 (UpdateService) 将内容插入到布局 (mainLayout) 中。

运行小部件时,我最初看到 header1 的文本按预期设置为“更新的标题”。然而,触摸小部件没有任何作用。

[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>

【问题讨论】:

    标签: c# android .net xamarin xamarin.android


    【解决方案1】:

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

    所以你需要像这样通过 id 查看:

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

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

    Here is更多Java信息

    【讨论】:

    • FindViewById 对 Service 类不可用。
    • @Mason240 它必须可用于 View 类。所以我从 mainView 调用它。还是不是视图?
    • @ad1Dima - 因为这是一个 Widget,所以它是一个 RemoteViews,它没有 findViewById()
    • @Mason240 你是对的。所以我用一些新信息更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    相关资源
    最近更新 更多