我在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(); };
}
}
答案 0 :(得分:3)
一些想法不仅仅是一个答案,也许可能是不好的做法,但我没有遇到你的问题:
我通常在OnViewCreated(片段)/ OnCreate(活动)中添加以编程方式创建的视图
确保您的LinearLayout有父级。它必须添加到父视图(根布局,另一个布局,滚动视图......)。
确保您没有阻止,手动启动的涉及UI更新的线程(即使通过RunOnUiThread),这可以通过活动重新启动来解锁。
确保您的视图不会被布局中的另一个现有视图“展平”(例如,在两个维度中都有一个与父级相匹配的视图)
除了它不会显示您的布局之外,您的应用程序是否正常运行(没有永久冻结)?