如何滚动ListView到位置

How to scroll ListView to position

我有 20 item.i 使用 scrollTo(0,getListViewHeight(listView,5)) 滚动位置 5.

显示 5 到 11 时出错。我不希望显示 5 结束。怎么办? http://i.stack.imgur.com/pMulJ.png

我调用 adapter.notifyDataSetChanged(); 没有动作。 如何显示从位置 5 到结尾的项目。

代码:

@InjectView(R.id.list_item)
    ListView listView;
    String[] values = new String[]{"1",
                                   "2",
                                   "3",
                                   "4",
                                   "5",
                                   "6",
                                   "7",
                                   "8",
                                   "9",
                                   "10",
                                   "11",
                                   "12",
                                   "13",
                                   "14",
                                   "15",
                                   "16",
                                   "17",
                                   "18",
                                   "19",
                                   "20",
                                   "21",
                                   "22"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo_scroll_by_load_adapter);
        ButterKnife.inject(this,
                           this);
        final ArrayAdapter adapter = new ArrayAdapter(this,
                                                      android.R.layout.simple_list_item_1,
                                                      values);
        listView.setAdapter(adapter);
        listView.scrollTo(0,
                          getListViewHeight(listView,
                                            5));
//        adapter.clear();
//        adapter.addAll(values);
       // listView.requestLayout();

    }

    private int getListViewHeight(ListView list,
                                  int position) {

        int listviewHeight = 0;

        list.measure(View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.UNSPECIFIED,
                                                      View.MeasureSpec.UNSPECIFIED),
                     View.MeasureSpec.makeMeasureSpec(0,
                                                      View.MeasureSpec.UNSPECIFIED));

        listviewHeight = list.getMeasuredHeight() * position + (position * list.getDividerHeight());

        return listviewHeight;
    }

编辑

使用这个:

listView.post(new Runnable() {
        @Override public void run() {
            listView.smoothScrollToPositionFromTop(5, 0, 1);
        }
    });