ListView とHeaderViewがあります。 setSelection API でインデックスを設定すると、間違った (1 つ少ない) インデックスが選択されたインデックスとして設定されます。
以下はコードスニペストです:
final ListView lst = (ListView)findViewById(R.id.listView1);
LinearLayout headerLayout = new LinearLayout(this);
headerLayout.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.WRAP_CONTENT,ListView.LayoutParams.WRAP_CONTENT));
headerLayout.setId(9);
lst.addHeaderView(headerLayout, null, false);'code'
例えば
listView.setSelection(6);
Button btn6 = (Button)findViewById(R.id.button6);
btn6.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
lst.setSelection(6);
View v1 = lst.getChildAt(0);
int top = (v1 == null) ? 0 : v1.getTop();
lst.setSelectionFromTop(6, top);
//lst.setSelection(6);
}});
これにより、選択された項目として5 番目の位置の項目にフォーカスが設定されます。
私は試してみました
View v1 = listView.getChildAt(0);
View n = lst.findViewById(9); // 9 is id of listView's header.
listView.setSelectionFromTop(6, n.getMeasuredHeight());
と
View v1 = listView.getChildAt(0);
int top = (v1 == null) ? 0 : v1.getTop();
listView.setSelectionFromTop(6, top);
しかし、これもうまくいきません。