我建议为这些进度条(实际上是任何小部件)放置一个容器,例如
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<LinearLayout
android:id="@+id/linBars"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
</LinearLayout>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
然后在您的代码中,即在您的活动中(基本上您需要访问一个Context
对象)请记住,我给容器提供了 id 'linBars'。这可以是任何有效的 Java 标识符(它被放入 R.id。)
//Get the container
LinearLayout container = (LinearLayout) findViewById(R.id.linBars);
ProgressBar pbar = new ProgressBar(this);
//Set any properties for it here (eg setInterpolator etc)
container.addView(pbar); //ProgressBar and just about any widget is a subclass of View
我建议阅读ViewGroups,这是大多数“将小部件添加/删除到容器”代码所在的位置。LinearLayout
是它的一个子类,你也可以使用其他一些,但它可能是一堆ProgressBar
实例的最佳选择。
回答您的评论如何引用创建的小部件?
两种方式各有优劣
- 创建一个列表或数组来保存您的小部件,并在将它们
LinearLayout
添加到列表/数组之前或之后创建它们。您可以随心所欲地引用它们,除非您需要清理您的房屋OnDestroy
并删除对它们的所有引用,否则您的程序将占用内存,并且如果它在其父级被破坏的小部件上调用某些东西,它将什么也不做或爆炸(又名抛出异常)。
ViewGroup
实际上会让您访问它下面的任何和所有小部件。不幸的是,您无法保证检索到的小部件的顺序或类型。方法是getChildAt(int index)
和getChildCount()
。请记住,它返回一个View
对象,因此只有当您确定所有孩子都属于某种类型时,您才能安全地转换它。我给它的SDK链接中描述的另一个警告,如果您指定的索引处没有子节点,它将返回null。在我们的示例中,我们知道添加的所有视图都是ProgressBar
如此,因此我们可以执行以下操作
获取所有进度条的示例:
//Get the container
LinearLayout container = (LinearLayout) findViewById(R.id.linBars);
ProgressBar pbar;
for (int i = 0; i < container.getChildCount(); i++) {
pbar = (ProgressBar) container.getChildAt(i);
//Do whatever to the progress bar here
}
我觉得我还必须指出另一个问题。如果用户离开应用程序(即点击主页按钮,接听电话),一段时间后系统决定销毁活动以节省内存,然后用户导航回您的应用程序,除非您保存信息,否则进度条将消失在此Bundle
期间重建它们OnDestroy
并检查您OnCreate
的项目,Bundle
然后重新添加到您的linearLayout
.