Android:我希望在ListView选择更改后隐藏进度条

时间:2013-01-07 20:00:04

标签: android progress-bar

由于ListView中的项目内容有点复杂,我的ListView需要几秒钟才能滚动到特定项目。所以我想添加一个Indeterminate进度条以使其顺利进行。

要滚动到特定项目,我使用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.

}

1 个答案:

答案 0 :(得分:0)

好吧,我没有看到你触发任何onclick excpet将isProgressBarDone设置为true。你需要做的是使用下面的fomat(你已经拥有),但是让你的代码在那里滚动。单击,您将获得所选内容的位置。使用该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
        }



});

看一下我链接到下面的例子。它处理在加载自定义列表视图时使用progressdialog但我认为该概念适用于您的代码。您需要做的是在调用进度条并解除它时修复。

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