我有一个listview的活动,它显示了我从网上获取的一些数据。在我显示列表视图之前,我在中间有一个进度指示器。活动开始时隐藏列表视图并显示进度指示器,我隐藏一个并在必要时显示另一个。它们彼此叠加在一起。现在我想添加显示带有错误消息的textview而不是listview的可能性。除了隐藏两个视图并且每次想要更改它时显示所需的视图,有没有更清晰的方法呢?
答案 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)));
如果没有太多的子视图,也可以使用硬编码索引。