如何取消ProgressBar?

时间:2017-07-04 21:53:33

标签: android android-layout progress-bar

所以,我已经切换到使用 // array with elements char[] items = {'a', 'b', 'c', 'd', 'e'}; int count = 0; // first of the "three" for (int i = 0; i < upperBound; i++) { // second of the "three" for (int j = 0; j < upperBound; j++) { // can't be identical to i if (j == i) continue; // third of the "three" for (int k = 0; k < upperBound; k++) { // can't be identical to i or j if (k == i || k ==j) continue; // print some display System.out.println(items[i] + ", " + items[j] + ", " + items[k]); // increment the total count count++; } } } System.out.println("Total count is " + count); 中的ProgressBar,如果我点击ProgressDialog以外的任何地方,我现在找不到任何方法可以使ProgressBar取消。 {1}}的视图区域,它会被忽略,我也想附加一个监听器,这样我就可以在取消它时执行一些代码。

这个ProgressBar是最简单,不确定的,非定制的,我有:

ProgressBar

我如何实现上述目标?

3 个答案:

答案 0 :(得分:2)

您只使用ProgressBar来表示某些内容的进度,它不包含任何逻辑,也不会创建任何类型的进程,它只会被外部进程(例如AsyncTask)更新(如果您愿意) )。这就是为什么它没有任何监听器并且它不可取消,因为ProgressBar只位于那里,所以另一个进程可以选择更新它或在完成后将其可见性设置为GONE。

所以基本上,你不应该担心进度条本身,你应该担心进度条代表的进程以及如何以及何时取消此进程,因此你可以调用progressBar.setVisibility(View.GONE) ) 当这个情况发生时。

作为一个例子,我使用ProgressBar来表示使用Picasso加载ImageView。 Picasso提供回调函数,让您知道加载成功或失败的时间。在这两种情况下,我将ProgressBar可见性设置为GONE,并根据具体情况采取其他操作。这就是为什么我说你必须知道如何以及何时应该操纵ProgressBar的可见性。

Picasso.with(this)
                .load("https://image.tmdb.org/t/p/w640" + m.getPosterPath())
                .into(posterImageView, new com.squareup.picasso.Callback() {
                    @Override
                    public void onSuccess() {
                        progressBar.setVisibility(View.GONE);
                    }

                    @Override
                    public void onError() {
                        progressBar.setVisibility(View.GONE);
                        noImageFoundTextView.setVisibility(View.VISIBLE);
                    }
});

好的,所以如果您关注的是UX,并且您希望用户可以使ProgressBar不可用,那么您可以实现这种解决方法:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_gravity="center"
        android:layout_marginTop="5dp">
        <ProgressBar
            android:id="@+id/progressBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"/>

        <ImageView
            android:id="@+id/dismissButton"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:gravity="center"
            android:background="@android:drawable/ic_menu_close_clear_cancel"
            android:layout_gravity="center"/>
</FrameLayout>

imageview将处理进度条的关闭。

dismissButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            progressBar.setVisibility(View.GONE);
            dismissButton.setVisibility(View.GONE);
            //Take other actions on dismiss
        }
});

enter image description here

答案 1 :(得分:0)

我假设您的ProgressBar处于某种布局,例如一个LinearLayout。您可以创建一个OnTouchListener并将其应用于包含ProgressBar的布局,将相同的OnTouchListener应用于任何其他可见的视图。您可以关闭ProgressBar并从OnTouchListener中执行其他代码。

答案 2 :(得分:0)

最顶层(Parent)layout.Apply OnTouchListener,并放置此行

SQL> select value from v$diag_info where name = 'Default Trace File'/* name of the trace file */;
SQL> exec dbms_monitor.session_trace_enable(null, null, true, false, 'all_executions')
SQL> your query executed under normal circumstances
SQL> exec dbms_monitor.session_trace_enable(null, null)