5

我已经设置了一个 FrameLayout,它的TextView顶部有一个ListView. 现在,在 中MainActivity,执行一些代码后,我检查 是否ListView为空。如果是,我显示TextView,如果不是,我删除TextView.

代码如下:

以下是main.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/flMain"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvAddItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Add some subjects"
        android:textSize="20sp" />

    <ListView
        android:id="@+id/ItemsList"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" />

</FrameLayout>

在 MainActivity 类中,我执行以下操作:

MainActivity.java

TextView tvNoItem = (TextView) findViewById(R.id.tvAddItem);
ListView subListView = (ListView) findViewById(R.id.itemsList);
FrameLayout fl = (FrameLayout) findViewById(R.id.flMain);

ArrayList<Item> itemsList;

//some code

if(itemsList.isEmpty()) {
    fl.addView(tvNoItem);
} else {
    fl.removeView(tvNoItem);
}

现在,当我运行它并向列表中添加一些项目时,TextView(tvNoItem) 确实被删除了。但我看到的只是一个空白列表 - 列表项不可见。[顺便说一句,列表工作正常。当我删除TextViewfrommain.xml时,我可以看到所有列表项。] 请帮忙。

4

8 回答 8

15
    txtview.setVisibility(View.GONE) ;
    txtview.setVisibility(View.VISIBLE) ;
于 2013-07-09T06:26:43.837 回答
3

为什么不使用emptyViewListView选项。

这是一篇关于在适配器为空时显示空视图的好帖子。当您的适配器源为空时,它将自动显示。

Android – ListView => setEmptyView()

你不需要检查你的数据源(ArrayList)是否为空,android框架会处理所有的隐藏和显示实现。

确保在调用setEmptyView()之前先调用setAdapter()ListView

于 2013-07-09T06:25:54.393 回答
1

而不是添加和删除 TextView 尝试隐藏和显示它。使用 View.VISIBLE 和 VIEW.GONE 属性:

if(itemsList.isEmpty()) {
    tvNoItem.setVisibility(View.VISIBLE);
} else {
    tvNoItem.setVisibility(View.GONE);
}

希望有帮助。

于 2013-07-09T06:26:30.600 回答
0

相反,添加/删除尝试更改可见性状态。

于 2013-07-09T06:26:00.767 回答
0

实际上有一个提示和技巧可以在listView为空时显示视图

<FrameLayout
android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >

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

<ViewStub
android:id="@android:id/empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout="@layout/empty" />
</FrameLayout>

AViewStub是一个不可见的,大小为零的View,可用于在运行时懒惰地膨胀布局资源。只有当可见性变为时,布局@layout/empty才会膨胀。一旦视图层次结构膨胀,它将替换全局布局中的。ViewStubView.VISIBLE@layout/emptyViewStub

ViewStub 文档

资源

于 2013-07-09T06:31:36.400 回答
0

1)首先,您的代码存在一些问题。你tvNoItem已经在 xml 布局中定义了,所以你不应该再次添加它。您只添加动态创建的视图,例如

textView tv = new TextView(this);
... //customize your text view
fl.addView(tv);

你真的应该设置你的 textview xmlandroid:visibility="gone"并在你想要的时候让它可见。

2)如果您希望将文本视图放在列表视图的顶部,请使用LinearLayout而不是。FrameLayout在您的列表视图中,更改android:layout_height="0dip"android:layout_height="wrap_content"并删除 layout_weight。

于 2013-07-09T06:32:12.933 回答
0
rowtxt.setText("Hello" +  ++i);//for adding textview
rltv.addView(rowtxt);

rowtxt.setVisibility(View.GONE);//use for disable textview
            rltv.removeViewAt(--i);
于 2016-09-03T11:29:22.847 回答
0

在布局中动态获取视图之前,首先重置

LinearLayout lc2 = (LinearLayout) findViewById(R.id.leftcode1);
LinearLayout lc3 = (LinearLayout) findViewById(R.id.lcvalue1);

lc2.removeAllViews();
lc3.removeAllViews();

以上几行对我有用,以防止重复在该线性布局中动态添加文本视图

于 2017-03-30T10:55:25.397 回答