2014-11-15 44 views
2

我想在Android中创建一个ListView。当我点击一个项目时,我想让它滚动到顶部。我怎样才能做到这一点?下面是我想出来的活动类,项目选择工作正常,但它不会在滚动到顶部Android的ListView如何滚动选定的项目顶部

public class MyListActivity extends ListActivity { 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
     "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
     "Linux", "OS/2" }; 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, values); 
     setListAdapter(adapter); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     String item = (String) getListAdapter().getItem(position); 
     //l.setSelection(2); 

     Toast.makeText(this, position + " selected", Toast.LENGTH_LONG).show(); 
     //l.smoothScrollToPosition(5); 

    } 
} 
+0

在这里看到我的回答,http://stackoverflow.com/a/29345217/1881527 –

回答

1

尝试使用此方法setSelection (int position)

设置当前选择的项目。要支持覆盖此方法的辅助功能子类,必须首先调用overridden超级方法。

1

根据这一https://stackoverflow.com/a/18133295/3225458,你应该尝试post平滑滚动:

@Override 
protected void onListItemClick(final ListView l, View v, int position, long id) { 
    String item = (String) getListAdapter().getItem(position); 
    l.post(new Runnable() { 
     @Override 
     public void run() { 
      l.smoothScrollToPosition(pos); 
     } 
    }); 
    Toast.makeText(this, position + " selected", Toast.LENGTH_LONG).show(); 
} 
+0

我试了你的建议,但没有滚动 – user1892775

11

使用此。将项目顺利滚动到列表视图的顶部。

int duration = 500; //miliseconds 
int offset = 0;  //fromListTop 

listview.smoothScrollToPositionFromTop(position,offset,duration); 
  • descrease时间,使滚动更快
+0

非常有用,谢谢! –

+0

谢谢@MohsenBahmanpoor。很简单,我可以说和完美的工作 – Adam

+0

这应该是接受的答案 –

0

试试这个: -

yourListView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       int duration = 500; // miliseconds 
       int offset = 0; 
       yourListView.smoothScrollToPositionFromTop(arg2, offset, duration); 
       yourListView.setSelection(arg2); 
      } 
     });