2017-08-24 20 views
0

私はXamarin.android用のアプリケーションをC#で作成していて、奇妙な問題に遭遇しました。 私はビューを膨張させるラッパークラスを使用します。その後、私は、AddViewを使って線図にビューを追加します。場合によってはGUIが更新されないことがあります。要素は追加されません。タスクボタンを呼び出すと(私はそれが正しい名前であるかわからない - ホームボタンのボタン)、次に私のアプリに戻って要素が表示されます。私はどこかでInvalidate()を使ってguiを更新することができると読んでいますが、それはうまくいかないようです。Xamarin.androidのGUIがAddViewの後に更新されない

どのような提案も高く評価されています。

これは、ラッパークラスの私のコンストラクタです:

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

コード、ラッパークラス、およびビューを 'LinearLayout'に追加する方法を投稿してください –

答えて

3

、および多分悪い習慣になる可能性がありますが、私はあなたの問題に遭遇しません:

  • 私は通常、 OnViewCreated(フラグメント)/ OnCreate(アクティビティ)のビューを作成しました

  • LinearLayoutに親があることを確認してください。親ビュー(ルートレイアウト、別のレイアウト、スクロールビューなど)に追加する必要があります。

  • アクティビティレクリエーションによってロック解除できるUI更新(RunOnUiThread経由であっても)を含むブロックされた手動起動のスレッドがないことを確認してください。

  • ビューは、実際の横に

(ビューマッチング親の両方の次元のサイズを有する例えば)あなたのレイアウト内の別の既存のもので、「平坦化」されていないことを確認していること、それはしませんレイアウトを表示する、アプリケーションが正常に動作している(永続的にフリーズしていない)

関連する問題