Android 可以在ListFragment上以编程方式添加ImageView吗?

Android 可以在ListFragment上以编程方式添加ImageView吗?,android,android-fragments,fragment,android-listfragment,Android,Android Fragments,Fragment,Android Listfragment,在我的项目中,有一个片段是ListFragment。到目前为止,我所做的是用SQLite数据库中的数据填充列表;但现在,我面临着这个问题: 如果数据库中没有数据,我的ListFragment将为空;这就是为什么我想用一张图片来代替列表 现在,我被困在如何在我的ListFragment中使用onCreateView上 我发现的一种替代方法是:使用Fragment而不是ListFragment 有没有其他方法可以做到这一点,而不用将ListFragment替换为Fragment 编辑1 这进入了do

在我的项目中,有一个片段是ListFragment。到目前为止,我所做的是用SQLite数据库中的数据填充列表;但现在,我面临着这个问题:

如果数据库中没有数据,我的ListFragment将为空;这就是为什么我想用一张图片来代替列表

现在,我被困在如何在我的ListFragment中使用onCreateView上

我发现的一种替代方法是:使用Fragment而不是ListFragment

有没有其他方法可以做到这一点,而不用将ListFragment替换为Fragment

编辑1 这进入了doInBackGround的内部:

编辑2 我用光标做了一些更改。我删除了SQLite上的一些数据以测试它是否有效;但现在,它什么也没显示出来


如果我理解正确,你可以让你的布局看起来像这样。如果listview为空,则具有此id的ImageView将显示在页面中心

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:dividerHeight="1px"
        android:paddingLeft="3dp"
        android:paddingRight="3dp">
    </ListView>

    <ImageView
        android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>
<!-- Maybe some your stuff here --> 
</LinearLayout>

如果扩展列表片段并希望在列表视图为空时设置图像视图,则为Hi。android提供set empty view方法,用于在列表视图没有可用数据时显示视图。请参阅下面的如何设置空视图

下面是我的列表片段的布局布局内容图像视图的空布局,当列表视图没有要显示的内容时将显示该布局。实际上,它总是隐藏在列表视图后面

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:paddingLeft="8dp"
         android:paddingRight="8dp">

     <ListView 
           android:id="@id/android:list"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:background="#00FF00"/>

      <include layout="@android:layout/empty_content" />
 </LinearLayout>
试着替换

Cursor c;
c = db.rawQuery("Select NOM_OFER,PREU_OFERTA,DATA_F,FOTO,PERCENTDESCOMPTE from T_OFERTA", null);

//HERE'S NOT NULL, SO I CAN PUT SOME STUFF
if (c.moveToFirst()) {
    do {
        for (int i = 0; i < c.getColumnCount(); i++) {
            Title = c.getString((c.getColumnIndex("NOM_OFER")));
            Preu = c.getColumnIndex("PREU_OFERTA");
            percent = c.getString((c.getColumnIndex("PERCENTDESCOMPTE")));
            data_f = c.getString((c.getColumnIndex("DATA_F")));
            URLTest = c.getString((c.getColumnIndex("FOTO")));
            Log.e("", "" + c.getString(i));

            // initialize and set the list adapter
            // Toast.makeText(getActivity(), "Title" + Title + "Preu" + Preu + "Percent" + percent + "Cheese is " + data_f, Toast.LENGTH_LONG).show();
        }

        mItems.add(new ListViewItem(URLTest, Title, Preu.toString(), percent, data_f));
    } while (c.isAfterLast());
}

if (!c.moveToFirst()) {
    Log.d("No registres","pewpew");

    // HERE I WANT TO ADD IMAGEVIEW CAUSE C IS NULL THEN THE FRAGMENT WON'T BE EMPTY
}
c.close();
把这个

getListView().setEmptyView(findViewById(R.id.layout_empty));
在调用setListAdapter之前


让我们看看,如果可行。

如果列表为空,您希望在列表的中间显示一个图像吗?不,如果我的列表为空,我希望在中间显示一个图像,以便您需要将emptyview添加到ListFragment ListView这太简单了。只需为您的ListView添加一个EmptyView,我必须在xml上添加EmptyView?我这样做了,但是当我启动它时,它只显示项目列表中的图像,我想在列表项目的中心不显示它如果显示空视图,即使您的列表视图有数据,那么只需在布局中设置可见性即可。列表视图它自己使它在列表视图没有数据显示时可见。我正在测试它等待:如果扩展ListFramgnet或普通片段,DMy解决方案将在这两种情况下都有效。如果扩展普通片段,则必须使用列表视图的对象定义empty,如mListiew.setemptyviewfindwiewbyidr.id.layout_empty;扩展ListFragment时,可以使用其他明智的getListView。我认为我做错的事情是在检查光标时,让我用一些代码编辑我的问题,但它不会显示图像:。。。我制作的用于放置ListItem的bucle它可以工作,正如我所说的,当我的SQLite上没有数据时它不工作它不会显示任何内容,只是一个空白片段没有放置-getListView.setEmptyViewgetActivity.findViewByIdR.id.layout\u empty;在setListAdapter工作之前?
<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:paddingLeft="8dp"
         android:paddingRight="8dp">

     <ListView 
           android:id="@id/android:list"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:background="#00FF00"/>

      <include layout="@android:layout/empty_content" />
 </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/layout_empty"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center" >

  <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/ic_app_logo" />

</LinearLayout>
getListView().setEmptyView(findViewById(R.id.layout_empty));
Cursor c;
c = db.rawQuery("Select NOM_OFER,PREU_OFERTA,DATA_F,FOTO,PERCENTDESCOMPTE from T_OFERTA", null);

//HERE'S NOT NULL, SO I CAN PUT SOME STUFF
if (c.moveToFirst()) {
    do {
        for (int i = 0; i < c.getColumnCount(); i++) {
            Title = c.getString((c.getColumnIndex("NOM_OFER")));
            Preu = c.getColumnIndex("PREU_OFERTA");
            percent = c.getString((c.getColumnIndex("PERCENTDESCOMPTE")));
            data_f = c.getString((c.getColumnIndex("DATA_F")));
            URLTest = c.getString((c.getColumnIndex("FOTO")));
            Log.e("", "" + c.getString(i));

            // initialize and set the list adapter
            // Toast.makeText(getActivity(), "Title" + Title + "Preu" + Preu + "Percent" + percent + "Cheese is " + data_f, Toast.LENGTH_LONG).show();
        }

        mItems.add(new ListViewItem(URLTest, Title, Preu.toString(), percent, data_f));
    } while (c.isAfterLast());
}

if (!c.moveToFirst()) {
    Log.d("No registres","pewpew");

    // HERE I WANT TO ADD IMAGEVIEW CAUSE C IS NULL THEN THE FRAGMENT WON'T BE EMPTY
}
c.close();
Cursor c;
c = db.rawQuery("Select NOM_OFER,PREU_OFERTA,DATA_F,FOTO,PERCENTDESCOMPTE from T_OFERTA", null);

//HERE'S NOT NULL, SO I CAN PUT SOME STUFF
if (c.moveToFirst()) {
    do {

            Title = c.getString((c.getColumnIndex("NOM_OFER")));
            Preu = c.getColumnIndex("PREU_OFERTA");
            percent = c.getString((c.getColumnIndex("PERCENTDESCOMPTE")));
            data_f = c.getString((c.getColumnIndex("DATA_F")));
            URLTest = c.getString((c.getColumnIndex("FOTO")));


        mItems.add(new ListViewItem(URLTest, Title, Preu.toString(), percent, data_f));
    } while (c.moveToNext());
}

if (!c.moveToFirst()) {
    Log.d("No registres","pewpew");

    // HERE I WANT TO ADD IMAGEVIEW CAUSE C IS NULL THEN THE FRAGMENT WON'T BE EMPTY
}
c.close();
getListView().setEmptyView(findViewById(R.id.layout_empty));