これは私の初めての投稿であり、私は愚かな初心者なので、誰かが私を助け、私の無知を許してくれることを願っています.
ArrayAdapter が取り込まれた ListView があります。スクロールまたはクリックすると、選択したアイテム、または垂直方向の中央に最も近いアイテムが、画面の垂直方向の正確な中央に強制的に配置されます。listView.setSelection(int position) を呼び出すと、選択した位置が画面の上部に配置されるため、代わりに listView.setSelectionFromTop(position, offset) を使用する必要があります。オフセットを見つけるために、ListView の高さの半分からビューの高さの半分を取得します。
したがって、OnItemClick または OnScrollStateChanged 内で、次のようにすると、アイテムを垂直方向に簡単に中央揃えにすることができます。
int x = listView.getHeight();
int y = listView.getChildAt(0).getHeight();
listView.setSelectionFromTop(myPosition, x/2 - y/2);
これはすべて正常に機能します。私の問題は、最初の ListView セットアップにあります。アクティビティの開始時にアイテムを中央に配置したいのですが、次から NullPointerException を取得するため、できません。
int y = listView.getChildAt(0).getHeight();
これは、ListView がまだレンダリングされていないためであり、OnCreate() または OnResume() からこれを呼び出したときに子がないためだと理解しています。
だから私の質問は簡単です:必要な高さの値を取得できるように、ListViewを起動時に強制的にレンダリングするにはどうすればよいですか? または、代わりに、ListView 内で項目を垂直方向に中央揃えする方法は他にありますか?
助けてくれてありがとう!