如何同步两个Listview位置

我有两个ListViews 。 当我滚动任何一个列表时,有没有办法同步ListViews的位置。 我实现了一个AbsListView.OnScrollListener ,注册到ListView 。 滚动ListView ,将触发OnScrollListeneronScroll()方法,然后调用`smoothScrollToPosition()’。 但它确实正常工作。 有人可以为我提供任何代码示例吗?

这是nininho建议的工作代码示例

主要活动

 public class MainActivity extends Activity { public static String[] Cheeses = new String[] { "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi", "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre", "Allgauer Emmentaler", "Alverca", "Ambert", "American Cheese", }; ListView list1; ListView list2; boolean isLeftListEnabled = true; boolean isRightListEnabled = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, Cheeses); list1 = (ListView) findViewById(R.id.list1); list1.setAdapter(adapter); list2 = (ListView) findViewById(R.id.list2); list2.setAdapter(adapter); // IF YOU DO NOT OVERRIDE THIS // ONLY THE ONE THAT IS TOUCHED WILL SCROLL OVER list1.setOverScrollMode(ListView.OVER_SCROLL_NEVER); list2.setOverScrollMode(ListView.OVER_SCROLL_NEVER); list1.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // onScroll will be called and there will be an infinite loop. // That's why i set a boolean value if (scrollState == SCROLL_STATE_TOUCH_SCROLL) { isRightListEnabled = false; } else if (scrollState == SCROLL_STATE_IDLE) { isRightListEnabled = true; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { View c = view.getChildAt(0); if (c != null && isLeftListEnabled) { list2.setSelectionFromTop(firstVisibleItem, c.getTop()); } } }); list2.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == SCROLL_STATE_TOUCH_SCROLL) { isLeftListEnabled = false; } else if (scrollState == SCROLL_STATE_IDLE) { isLeftListEnabled = true; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { View c = view.getChildAt(0); if (c != null && isRightListEnabled) { list1.setSelectionFromTop(firstVisibleItem, c.getTop()); } } }); } } 

XML

      

如果位置可见,则smoothScrollToPosition()将不会滚动。 你可以想到在另一个目前没有滚动的列表上使用scrollTo或scrollBy,但要小心不要输入每个列表调用另一个滚动的递归。