質問

私は持っています 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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top