C#,Android:构建自己的事件监听器

时间:2018-08-20 10:59:48

标签: android xamarin xamarin.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();
            }

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

谢谢:)

1 个答案:

答案 0 :(得分:1)

使用FancyShowCaseQueue控制顺序。

您向其中添加了单独的FancyShowCaseView,并且当您“ Show()”队列时,每个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();

我正在使用FancyShowCaseView的Xamarin.Android绑定库,但是您可以查看仓库中示例应用程序中基于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();