首页 > 解决方案 > C#,Android:构建自己的事件监听器

问题描述

这就是问题所在。我正在使用来自其他人的自定义组件,称为“花式展示视图”。它着重于我活动中的按钮,并通过应用程序通过文本作为教程突出显示它们。我正在开始第一条消息,当用户通过单击活动中的任意位置来消除此消息时,应该突出显示下一个按钮。不幸的是,该组件,否则是完美的,没有像第一个教程视图的“OnDismis”那样实现的侦听器,因此下一个可以开始。只需将两者都放入代码中,然后另一个跳过第二个。它还尝试使用生命周期方法,例如 OnFocuseChanged(),但即使在教程被关闭后,此方法也不会再次调用。你们会说什么是处理这个问题的最佳方法?这是不起作用的:

            try
            {
                new FancyShowCaseView.Builder(this) // if this crashes, we need clean rebuild
                    .Title(title1)
                    .TitleStyle(0, (int)GravityFlags.Center | (int)GravityFlags.Center)
                    .Build()                      
                    .Show();
            }
            catch (Exception e)
            {
                Toast.MakeText(this, "There was an error ... " + e, ToastLength.Short).Show();
            }

            try
            {
                new FancyShowCaseView.Builder(this) // if this crashes, we need clean rebuild
                    .Title("TEST")
                    //.TitleStyle(0, (int)GravityFlags.Center | (int)GravityFlags.Center)
                    .FocusOn(txtL)
                    .Build()
                    .Show();
            }
            catch (Exception e)
            {
                Toast.MakeText(this, "There was an error ... " + e, ToastLength.Short).Show();
            }

第二个没有出现。没有事件处理程序,我无法使用生命周期方法。点击计数也不起作用,因为用户可能会在加载时点击活动,所以硬编码的值也不是一个好的选择。有任何想法吗?

谢谢:)

标签: androidxamarinxamarin.android

解决方案


使用FancyShowCaseQueue来控制顺序。

您将单个FancyShowCaseViews 添加到其中,并且当您“显示()”队列时,每个 FancyShowCaseView 都会按照您将它们添加到队列中的顺序发生。

例子:

var fancyView1 = new FancyShowCaseView.Builder(this)
                  .Title("StackOverflow 1")
                  .FocusOn(button1)
                  .Build();
var fancyView2 = new FancyShowCaseView.Builder(this)
                  .Title("StackOverflow 2")
                  .FocusOn(button1)
                  .Build();

var fancyQueue = new FancyShowCaseQueue()
                      .Add(fancyView1)
                      .Add(fancyView2);
fancyQueue.Show();

我使用的是 Xamarin.Android 绑定库FancyShowCaseView,但您可以查看 repo 的示例应用程序中的基于 Java 的示例,即:AnimatedActivity.java

您还可以实现ME.Toptas.Fancyshowcase.IDismissListener接口:

public void OnDismiss(string p0)
{
    // 
}

public void OnSkipped(string p0)
{
    //
}

并在您的每个 FancyShowCaseViews 上使用该实现:

var fancyView2 = new FancyShowCaseView.Builder(this)
                        .Title("StackOverflow 2")
                        .FocusOn(button2)
                        .DismissListener(this)
                        .Build();

推荐阅读