私は2つ持っていListViews
ます。ListViews
リストのいずれかをスクロールするときの位置を同期する方法はありますか? を実装しAbsListView.OnScrollListener
、 に登録していListView
ます。がListView
スクロールされると、のonScroll()
メソッドOnScrollListener
がトリガーされます。次に、「smoothScrollToPosition()」を呼び出します。しかし、それは正しく機能しません。誰かがこれのコード例を提供できますか?
質問する
5096 次
2 に答える
5
これは、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<String>(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
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:splitMotionEvents="true">
<ListView android:id="@+id/list1"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1" />
<ListView android:id="@+id/list2"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
于 2013-04-23T11:56:25.073 に答える
1
位置が表示されている場合、 SmoothScrollToPosition() はスクロールしません。現時点でスクロールしていない他のリストで scrollTo または scrollBy を使用すると考えることができますが、各リストが他のリストをスクロールするために再帰を入力しないように注意してください。
于 2012-08-10T17:57:07.070 に答える