0

ListView の項目の内容は少し複雑であるため、ListView が特定の項目に移動するのに数秒かかります。だから私はそれをスムーズにするために不確定な進行状況バーを追加したいと思います。

特定の項目に移動するには、listView.setSelection(n) を使用しました。次に、「setOnItemSelectedListener」イベントハンドラーを使用して、ローリング後に進行状況バーを非表示にする傾向がありました。しかし、イベント ハンドラは呼び出されません。

私の概念が完全に間違っている可能性があります。その方法がわかりません(この場合のように使用する進行状況バー)。コンセプトを見せていただければ詳細も大歓迎です。

どうもありがとうございました。

public class ListViewAdapter extends BaseAdapter {

private ProgressBar progressBar;
private Handler progressBarHandler = new Handler();
boolean isProgressBarDone;

private void jumpToSelectedItem(View arg0) {
        ...
        listView.setSelection(selectedDaYunItem);
}

ListView listView = (ListView)((MyActivity)cellView.getContext()).findViewById(R.id.listview);
listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        // onItemSelected event handler has not triggered.
        @Override
        public void onItemSelected(AdapterView<?> arg0,
                View arg1, int arg2, long arg3) {
            isProgressBarDone = true;
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub                  
        }
});


public class LiouYunCellAdapter {

    cellView.setOnTouchListener(new View.OnTouchListener() {

        // It takes a little seconds to operate.
        private void jumpToSelectedItem(View arg0) {
            ....
        }

        @Override
        public boolean onTouch(View arg0, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                progressBar = findProgressBar(arg0);

                // ProgressBar start.
                new Thread(new Runnable() {
                    public void run() {
                        isProgressBarDone = false;
                        while (!isProgressBarDone) {                                                
                            // Update the progress bar
                            progressBarHandler.post(new Runnable() {
                                public void run() {
                                            progressBar.setVisibility(View.VISIBLE);
                                    }
                                }
                            });                                           
                        }                                                                               
                    }).start();

                    jumpToSelectedItem(arg0);  
                }               
            }

            return true;
        }
    });      
    // End setOnTouchListener().

}    
// end class LiouYunCellAdapter.

}

4

1 に答える 1

0

わかりました、isProgressBarDone を true に設定するために onclick 以外の何かをトリガーしているとは思いません。あなたがする必要があるのは、以下のフォーマット(すでに持っているもの)を使用することですが、そこにスクロールするコードを入れてください。クリックすると、選択されたものの位置が取得されます。その ID を使用して、スクロールをトリガーします。また、ここで進行状況バーを開始し、そのメソッドの最後で終了する必要があります。現在、進行状況バーは独自のスレッドで実行されており、それを止めるものは何もありません。

listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {

            //You will get the positino of the item clicked here
            //This is where your code to scroll should go as well as
            //starting the progress bar
        }



});

以下にリンクした例を見てください。カスタムリストビューの読み込み中にプログレスダイアログの使用を扱いますが、その概念はコードに適用できると思います。あなたがする必要があるのは、進行状況バーを呼び出して閉じるときに修正することです。

http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/

于 2013-01-09T20:02:10.543 に答える