Android根据状态显示不同的视图

时间:2012-12-02 01:52:23

标签: android android-view

我有一个listview的活动,它显示了我从网上获取的一些数据。在我显示列表视图之前,我在中间有一个进度指示器。活动开始时隐藏列表视图并显示进度指示器,我隐藏一个并在必要时显示另一个。它们彼此叠加在一起。现在我想添加显示带有错误消息的textview而不是listview的可能性。除了隐藏两个视图并且每次想要更改它时显示所需的视图,有没有更清晰的方法呢?

4 个答案:

答案 0 :(得分: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)中,在AsyncTask中,检查{{1}中返回的数据长度 0

例如:

JSONArray

由于XML的定义方式,如果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 } length() == 0变为可见并显示而不是TextView

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

摘录如下:

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

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

有关详细说明,请参阅this

答案 3 :(得分:0)

我找到了一个不错的解决方案。我找到了ViewFlipper而不是ViewSwitcher,它允许多个视图。此外,它还允许您设置动画以在视图之间切换

<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)));

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