3

私はLinearLayout他のいくつかのビューを含むを持っています、そしてそれらの中にはListView。このビューは、ボタンをクリックすることで別のビューからロードされます。

このボタンは、どういうわけか、ListViewのどの要素がリストの最初に表示される要素である必要があるかを指定します。リストに入力される要素は、HTTPを介して外部サーバーから取得されます。

問題は、N番目の要素をリストの最初にすることができることです。現在の位置から新しい位置に移動したくないので、リストをスクロールしたいので注意してください。

私はandとandを試しまし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();

                }
            }
        });

そして、これは私にいくらかの成功をもたらしました、しかし、ListViewはそれから私が説明することさえできない方法で狂ったように振る舞っていました...。

何か案が?

4

2 に答える 2

5

メッセージキューに追加してみてください

categoryList.post(new Runnable() {
    public void run() {
        categoryList.scrollTo(4, CategoryActivity.scrollToIndex * 50);
    }
});

ScrollViewで機能しました(この回答を確認してください)。

于 2010-11-24T17:00:13.277 に答える
2

私は他の人がリストビューのスクロールに役立つ可能性のある関数を作成しました。それらはすべてのAndroidバージョン、エミュレーター、およびデバイスで機能します。ここで、itemheightはリストビューのビューの固定高さです。

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;
}
于 2012-11-16T03:03:16.817 に答える