0

SQLite データベースから取得した情報を表示するリストがあり、すべて正常に動作します。リストの上部に広告バナーを配置し、他のアクティビティと同様に XML レイアウトで表示したいのですが、広告はリスト テキスト ビューのように扱われ、データベース情報と共に各リスト要素内で繰り返されます。

私は 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>

広告とテキスト ビューを分離するために、レイアウト内でレイアウトをネストしようとしましたが、実際に必要なことを達成できるかどうかはわかりません。アドバイスをいただければ幸いです。

4

1 に答える 1

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 が実際にどのように機能するかを完全に認識しています。:)

于 2013-05-06T11:09:16.430 に答える