0

我有一个带有列表视图的活动,它显示了我从网上获取的一些数据。在显示列表视图之前,我在中间有一个进度指示器。该活动从隐藏的列表视图和显示的进度指示器开始,我隐藏一个并在必要时显示另一个。它们位于彼此之上的框架布局中。现在我想添加在必要时显示带有错误消息的文本视图而不是列表视图的可能性。有没有比隐藏两个视图并在每次我想要更改它时显示所需的一个更清洁的方法?

4

4 回答 4

1

这就是我定义包含ListView带有进度条的 XML 的方式。

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/linlaHeaderProgress"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:orientation="horizontal"
            android:visibility="gone" >

            <ProgressBar
                android:id="@+id/pbHeaderProgress"
                style="@style/Spinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="2dp" >
            </ProgressBar>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:gravity="left|center"
                android:padding="2dp"
                android:text="Loading...."
                android:textColor="#F1F1F1"
                android:textSize="20sp" >
            </TextView>
        </LinearLayout>

        <ListView
            android:id="@+id/list"
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:cacheColorHint="@android:color/transparent"
            android:divider="#000000"
            android:dividerHeight="0dp"
            android:fadingEdge="none"
            android:persistentDrawingCache="scrolling" >
        </ListView>

        <TextView
            android:id="@android:id/empty"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:padding="10dp"
            android:textColor="#f1f1f1"
            android:textSize="15sp"
            android:textStyle="bold"
            android:visibility="gone" >
        </TextView>
    </LinearLayout>

</LinearLayout>

Activity用于获取和显示数据(在我的例子中是 Facebook API)中,在 an 中AsyncTask,我检查 a 中数据的返回长度是否JSONArray0

例如:

TextView txtEmptyData = (TextView) findViewById(android.R.id.empty);
if (JAFeeds.length() == 0)  {
    txtEmptyData.setVisibility(View.VISIBLE);
else {
    txtEmptyData.setVisibility(View.GONE);

    // DO THE REST OF THE PROCESSING TO FETCH THE REMAINING DATA TO DISPLAY
}

由于 XML 的定义方式,如果length() == 0, 则TextView变为可见并显示而不是ListView

于 2012-12-02T06:12:06.317 回答
0

您可以使用 ViewSwitcher。您将在那里添加一些视图并按顺序显示它们,调用 showNext()

于 2012-12-02T02:34:08.717 回答
0

您可以随时在 AdapterView 对象上调用 AdapterView.setEmptyView(View v) 来附加您想用作空视图的视图。

片段如下:

empty = (TextView)findViewById(R.id.empty1);
 list = (ListView)findViewById(R.id.list1);
 list.setEmptyView(empty);

确保将 ListView 和 TextView 保持在同一个父级中。

详细说明请参考这里

于 2012-12-02T05:20:39.287 回答
0

我找到了一个不错的解决方案。而不是建议的 ViewSwitcher,我发现 ViewFlipper 允许多个视图。它还允许您设置动画以在视图之间进行更改

<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/viewFlipper"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />

</ViewFlipper>

虽然在视图之间切换有点混乱

mViewFlipper.setDisplayedChild(mViewFlipper.indexOfChild(findViewById(R.id.myView)));

如果没有太多子视图,也可以使用硬编码索引。

于 2012-12-02T23:20:21.367 回答