【问题标题】:How do I programmatically add a ProgressBar in AsyncTask.onPreExecute?如何以编程方式在 AsyncTask.onPreExecute 中添加 ProgressBar?
【发布时间】:2012-07-16 14:08:06
【问题描述】:

异步任务中的代码:

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        ScrollView sv = (ScrollView)findViewById(mScrollViewID);
        sv.removeAllViews();
        pb = new ProgressBar(mContext, null, android.R.attr.progressBarStyleSmall);
        pb.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        pb.setIndeterminate(true);
        pb.setVisibility(View.VISIBLE);

        TextView tv = new TextView(mContext);
        tv.setText("Some text here.");
        sv.addView(pb);
    }

注意最后的TextView - 如果我将它添加到ScrollView,它会显示得很好。但是,我似乎无法让ProgressBar 显示任何内容。这是我第一次使用控件 - 我错过了什么傻事吗?

编辑:如果重要的话,使用中的ScrollView 在 XML 中定义为:

<ScrollView android:id="@+id/scrollview0" android:layout_width = "match_parent" android:layout_height="match_parent"
            android:fillViewport="true" android:padding="5dp">

【问题讨论】:

  • ProgressBar 是否需要在运行时实例化?
  • 您是否尝试将ProgressBar 宽度设置为MATCH_PARENT 而不是WRAP_CONTENT?
  • @Chintan,或多或少,是的(见下面的讨论) Squonk,是的,我玩过各种布局参数的值,包括显式值(例如,100、100 )。

标签: android android-progressbar


【解决方案1】:

动态创建 ProgressBar 时经常会出现这个问题

我建议通过xml创建一个ProgressBar

并设置默认可见性消失

【讨论】:

  • Show 不是 ProgressBar 的方法,而是 ProgressDialog 的方法。
  • 它必须至少通过代码添加和删除,因为ScrollView 只能有一个孩子。我也许可以从 XML 加载布局,但这确实没有必要。
  • 您可以添加任何布局来滚动视图,然后您可以向该布局添加多个组件...
  • 明白了,我在添加实际内容时会这样做。问题是有时我以编程方式添加LinearLayout,有时是RelativeLayout,有时只是一个TextView。对于本质上只是一个非常简单的动画的另一种布局将是浪费的。此外,在其他情况下,我希望此控件用于一种“图片库” - 所以我将通过 AsyncTasks 加载大约 30 张图片,每个图片都需要一个 ProgressBar,在这种情况下,不可能将它们预先放置在XML 布局。注意 - 我尝试在控件之间插入 LinearLayout,但仍然没有运气。
【解决方案2】:

如果您在pb 之后添加tv,则 deffinatyl 会显示错误?

这是因为ScrollView 只容纳一个孩子。那么你需要在ScrollView 中添加LinearLayout,然后在Linear layout 中添加其他内容

【讨论】:

  • 我不认为你理解这个问题......电视只是用来证明将孩子添加到ScrollView 是可见的,与ProgressBar 不同。电视仅用于调试目的,将会消失。
  • hmmm....否则您的代码对我来说看起来很完美。ScrollView 是您的父视图吗?如果不是父级,则尝试给出ScrollView 的高度。说100dip
猜你喜欢
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
  • 1970-01-01
  • 2017-02-25
  • 2019-02-11
  • 1970-01-01
相关资源
最近更新 更多