如何在我的Android列表视图中停止每个列表项重复广告

时间:2013-05-06 11:01:18

标签: android android-layout xml-layout

我有一个列表,显示从我的SQLite数据库中获取的信息,一切正常。我想在列表的顶部放置一个广告横幅,并将其放在XML布局中,就像我对其他活动一样,但广告被视为列表文本视图,并在每个列表元素中重复,同时包含数据库信息。 / p>

我已经尝试了几个小时的XML布局代码并阅读其他解决方案,但似乎没有任何工作,我很难过。这是我的班级代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ScoresDbAdapter.DatabaseHelper helper = new ScoresDbAdapter.DatabaseHelper(this);
    database = helper.getWritableDatabase();
    Cursor data = database.query("scores", fields, null, null, null, null, null);

    dataSource = new SimpleCursorAdapter(this, R.layout.highscores, data, fields, new int[] { R.id.first, R.id.last });

    ListView view = getListView();
    view.setHeaderDividersEnabled(true);
    view.addHeaderView(getLayoutInflater().inflate(R.layout.highscores, null));

    setListAdapter(dataSource);
}

这是我的XML布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/rowLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<com.google.ads.AdView
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ads:adSize="BANNER"
    ads:adUnitId="a151868c65661b8"
    ads:loadAdOnCreate="true" />

<TextView
    android:id="@+id/first"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:text="First name" />

<TextView
    android:id="@+id/last"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:gravity="right"
    android:text="Last name" />

</RelativeLayout>

我尝试在布局中嵌套布局以分隔广告和文字视图,但我不确定我是否能够完成我需要做的事情,任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

我认为你使用ListActivity?

简单的答案就是停止使用ListActivity和ListFragment。

使用常规活动,为setContentView指定布局(将横幅置于布局顶部,在ListView上方)并使用findViewbyId获取列表视图并添加适配器。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main)  //need to set layout now that we are no longer using listactivity

    ScoresDbAdapter.DatabaseHelper helper = new ScoresDbAdapter.DatabaseHelper(this);
    database = helper.getWritableDatabase();
    Cursor data = database.query("scores", fields, null, null, null, null, null);

    dataSource = new SimpleCursorAdapter(this, R.layout.highscores, data, fields, new int[]    { R.id.first, R.id.last });

    ListView view = (ListView) findViewbyId(R.id.list_view) //findbyid instead of getListView()
    view.setHeaderDividersEnabled(true);
    view.addHeaderView(getLayoutInflater().inflate(R.layout.highscores, null));

    view.setAdapter(dataSource);  //set the adapter to the listView
}

布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:gravity="center"
          android:orientation="vertical">

    <com.google.ads.AdView
    android:id="@+id/adView"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    ads:adSize="BANNER"
    ads:adUnitId="a151868c65661b8"
    ads:loadAdOnCreate="true" />

    <ListView
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:id="@+id/list_view" />
</LinearLayout>

正如您所看到的,代码中的差别并不大,现在您没有任何愚蠢的限制,现在您已完全了解ListView的实际工作方式! :)