没有 listView 时显示 imageView、button 和 textView

Show imageView,button and textView when no listView

在ActivityA中,有一个listView。如果列表大小等于 0,将显示 ImageViewtextViewbutton,否则将显示。

When no listView

但即使 istView 大小不等于 0,它们仍然显示。

 List<SearchResults> search = new ArrayList();
 BaseAdapter adapter;

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView2);
        image = (ImageView) findViewById(R.id.imageView);
        addInfo = (Button) findViewById(R.id.button2);
        displayText = (TextView) findViewById(R.id.NoData);
        adapter=new BaseAdapter(getApplication(),search);

        getData(name, month);  // retrieve data from MySQL
        adapter.getCount();
        if (search.size() == 0) {
            image.setVisibility(View.VISIBLE);
            addInfo.setVisibility(View.VISIBLE);
            displayText.setVisibility(View.VISIBLE);
            Log.e("SA", "null");
        } else {
            image.setVisibility(View.INVISIBLE);
            addInfo.setVisibility(View.INVISIBLE);
            displayText.setVisibility(View.INVISIBLE);
        }

基础适配器

public class BaseAdapter extends ArrayAdapter<SearchResults> {

    Context context;
    List<SearchResults> search;

    public BaseAdapter(Context context, List<SearchResults> search) {
        super(context, R.layout.retrieve_data, search);
        this.context = context;
        this.search = search;
    }

     public int getCount() {
        return search.size();
    }

日志显示null虽然有列表

activity_a

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <ImageView

        android:src="@mipmap/background_image"
        android:paddingTop="50dp"
        android:layout_width="200dp"
        android:layout_height="300dp"
        android:scaleType="fitXY"
        android:id="@+id/imageView"
        android:paddingLeft="20dp"
        android:layout_centerHorizontal="true"></ImageView>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="No Data"
        android:paddingBottom="20dp"
        android:textSize="15dp"
        android:textColor="@color/btn_login"
        android:gravity="center"
        android:id="@+id/NoData"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/imageView"/>

    <Button
        android:layout_width="250dp"
        android:layout_height="60dp"
        android:text="Add Data"
        android:id="@+id/button2"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/NoData"/>



    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/listView2"
            android:layout_weight="1"
            android:layout_alignParentLeft="true" />



    </RelativeLayout>


</RelativeLayout>

好吧,我认为您的部分问题是为视图可见性设置 INVISIBLE 而不是 GONE。我相信您必须设置 GONE 而不是 INVISIBLE。 不同之处在于 INVISIBLE 会使视图不可见但布局保持不变。因此,该按钮所在的屏幕上只会有一个空的 space。但是 GONE 将允许父视图表现得好像该视图不存在一样。这意味着视图的布局参数将不再受到尊重,我相信这正是您想要的。

INVISIBLE = make the view invisible but continues to respect its layout params

GONE = makes the view invisible and disregards the layout params of that view.

此外,请确保您的“搜索”列表在您创建适配器时已填充。将它从 OnCreate 函数中删除并放入 activity.

的 onResume 函数中可能是明智的