AddView之后,Xamarin.android GUI不会更新

时间:2017-08-24 09:19:54

标签: c# android android-layout xamarin.android

我在c#中为Xamarin.android创建了一个应用程序并遇到了一个奇怪的问题。 我使用一个包装类来扩展视图。之后,我使用AddView将视图添加到linearlayout。有时gui没有明显的原因更新。元素未添加。当我调用任务按钮(我不知道这是否是正确的名称 - 主页按钮左侧的按钮),然后导航回我的应用程序时,元素将出现。我在某处读到你可以使用Invalidate()来更新gui,但这似乎不起作用。

任何建议都非常感谢。

这是我的包装类的构造函数:

public BoxDisplay(MainActivity activity, Product product, ViewGroup root)
{
    View = activity.LayoutInflater.Inflate(Resource.Layout.BoxItem, root, false);
    shelf = View.FindViewById<TextView>(Resource.Id.Shelf);
    name = View.FindViewById<TextView>(Resource.Id.Name);
    barcode = View.FindViewById<TextView>(Resource.Id.Barcode);
    Stock = View.FindViewById<EditText>(Resource.Id.Stock);
    typ = View.FindViewById<TextView>(Resource.Id.type);
    this.activity = activity;
    SetProduct(product);
    Stock.ClearFocus();
    Stock.Click += (o, arg) =>
    {
        Stock.SelectAll();
    };
    Stock.EditorAction += EditorAction;
}

在这里我在创建活动很久之后添加了视图:

    private void GenerateView(List<Product> products)
    {
        var boxlist = FindViewById<LinearLayout>(Resource.Id.BoxList);
        foreach (var product in products)
        {
            var box = new BoxDisplay(this, product, boxlist);
            boxDisplays.Add(box);
            box.EnableEditText(false);
            boxlist.AddView(box.View);
            box.View.Click += (sender, e) => { box.UpdateBox(); };
        }
    }

1 个答案:

答案 0 :(得分:3)

一些想法不仅仅是一个答案,也许可能是不好的做法,但我没有遇到你的问题:

  • 我通常在OnViewCreated(片段)/ OnCreate(活动)中添加以编程方式创建的视图

  • 确保您的LinearLayout有父级。它必须添加到父视图(根布局,另一个布局,滚动视图......)。

  • 确保您没有阻止,手动启动的涉及UI更新的线程(即使通过RunOnUiThread),这可以通过活动重新启动来解锁。

  • 确保您的视图不会被布局中的另一个现有视图“展平”(例如,在两个维度中都有一个与父级相匹配的视图)

除了它不会显示您的布局之外,您的应用程序是否正常运行(没有永久冻结)?