Android ListView Scrollto
-
28-09-2019 - |
質問
私は持っています LinearLayout
それには他のいくつかのビューが含まれています ListView
。このビューは、ボタンをクリックして別のビューからロードされます。
このボタンは、ListView内のどの要素がリスト内の最初の目に見える要素であるかを指定します。リストに入力する要素は、外部サーバーからHTTPを介して取得されます。
問題は、リストの最初の要素になることができることです。現在の位置を新しい位置に移動したくないことに注意してください。リストをスクロールしたいと思います。
一緒に試しました setSelected()
と scrollTo(x,y)
と scrollBy(x,y)
しかし、運はありません。
私はまた、このコードのパイスを試してみました。
ListView categoryList = (ListView)findViewById(R.id.category_list);
categoryList.post(new Runnable() {
@Override
public void run() {
Log.d(this.getClass().getName(), "CategoryActivity.scrollToIndex: " + CategoryActivity.scrollToIndex);
if(CategoryActivity.scrollToIndex>0){
ListView categoryList = (ListView)findViewById(R.id.category_list);
categoryList.setScrollContainer(true);
categoryList.scrollTo(4, CategoryActivity.scrollToIndex * 50);
categoryList.requestLayout();
}
}
});
そして、これは私にいくらかの成功をもたらしましたが、リストビューは振る舞っていました クレイジー ある意味では、説明することさえできません。
何か案が?
解決
メッセージキューに追加してみてください
categoryList.post(new Runnable() {
public void run() {
categoryList.scrollTo(4, CategoryActivity.scrollToIndex * 50);
}
});
Scrollviewで私のために働いた(この答えを確認してください).
他のヒント
ListViewスクロールに他の人に役立つ機能を作成しました。すべてのAndroidバージョン、エミュレータ、デバイスで機能します。ここでは、ItemHeightはListViewの視界の固定された高さです。
int itemheight=60;
public void scrollToY(int position)
{
int item=(int)Math.floor(position/itemheight);
int scroll=(int) ((item*itemheight)-position);
this.setSelectionFromTop(item, scroll);// Important
}
public void scrollByY(int position)
{
position+=getListScrollY();
int item=(int)Math.floor(position/itemheight);
int scroll=(int) ((item*itemheight)-position);
this.setSelectionFromTop(item, scroll);// Important
}
public int getListScrollY()
{
try{
//int tempscroll=this.getFirstVisiblePosition()*itemheight;// Important
View v=this.getChildAt(0);
int tempscroll=(this.getFirstVisiblePosition()*itemheight)-v.getTop();// Important
return tempscroll;
}catch(Exception e){}
return 0;
}
所属していません StackOverflow