8

whatsup のようなメッセージング プラットフォームで作業しています。メッセージを送信するときは、db でデータを取得しているため、画面を更新する必要があります。送信ボタンを押すと、View を更新する必要があります。私はグーグルで検索しましたが、正確な解決策はありません.誰か助けてくれますか?

編集:

私のコード:

RelativeLayout layout=new RelativeLayout(this);
                LayoutParams lparams = new LayoutParams(
                        1200,LayoutParams.WRAP_CONTENT);
                layout.setLayoutParams(lparams);
                //layout.setBackgroundResource(R.drawable.bubble);
                // Creating a new TextView
                TextView tv = new TextView(this);
                tv.setText(msgdesc[i]);
                layout.setGravity(Gravity.RIGHT);
                tv.setPadding(30, 10, 0, 0); 
                layout.addView(tv);
                bubbleLayout.addView(layout);
4

6 に答える 6

9

requestLayout()どちらかを呼び出すかinvalidate()、ビューで正確に更新する内容に依存する必要があります

View再描画が必要な場合は、invalidate()

View境界(サイズなど)を変更した場合は、requestLayout()

于 2013-02-14T10:14:49.983 に答える
3

リストアダプターでリストビューを使用する場合、listadapter.notifyDataSetChanged();これを使用する必要があり、新しいデータでリストビューを更新します

于 2013-02-14T10:20:39.547 に答える
1

試してみましたview.invalidate()か? http://developer.android.com/reference/android/view/View.html

描く

描画は、ツリーを歩き、無効な領域と交差する各ビューをレンダリングすることによって処理されます。ツリーは順番にトラバースされるため、これは、親が子の前(つまり後ろ)に描画し、兄弟がツリーに表示される順序で描画されることを意味します。ビューに背景ドローアブルを設定すると、ビューはonDraw()メソッドを呼び出す前に背景ドローアブルを描画します。

フレームワークは、無効な領域にないビューを描画しないことに注意してください。

ビューを強制的に描画するには、を呼び出しますinvalidate()

この投稿の返信のように、ビューグループを無効にすることができます 。レイアウト全体を強制的に更新するにはどうすればよいですか?

于 2013-02-14T10:16:14.550 に答える
1

最後に、レイアウトに TextView しかない場合は、次を試してください。

//Supposing that msgdesc is a class field.

void myRefreshFunction(RelativeLayout l)
{
                if(l != null)
                {
                  l.removeAllViews();  
                  TextView tv = new TextView(this);
                  tv.setText(msgdesc[i]);
                  layout.setGravity(Gravity.RIGHT);
                  tv.setPadding(30, 10, 0, 0); 
                  layout.addView(tv);
                }
}
于 2013-02-14T13:18:46.390 に答える
1

ダイアンの答えを見てください:

invalidate() はビューを再描画するだけです: http://developer.android.com/reference/android/view/View.html#invalidate()

requestLayout() は、ビューが新しいメジャー/レイアウト パスを通過するように要求します (その後、再描画します): http://developer.android.com/reference/android/view/View.html#requestLayout()

于 2016-05-15T00:58:23.587 に答える