15

私の目標は単純です。「赤い長方形」をヘッダービューとして に追加したいListView。だから私は簡単な活動を作成します

public class MainActivity extends Activity {
    private String[] adapterData = new String[] { "Afghanistan", "Albania", "Algeria", 
            "American Samoa", "Andorra", "Angola"}; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView lv;
        lv = (ListView)findViewById(R.id.list);

        LayoutInflater lf;
        View headerView;
        lf = this.getLayoutInflater();
        headerView = (View)lf.inflate(R.layout.header, null, false);

        lv.addHeaderView(headerView, null, false);

        lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, adapterData)); 
    }
}

activity_main.xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0" 
        android:cacheColorHint="#0000"
        android:paddingLeft="20dip"
        android:paddingRight="20dip"
        android:divider="#0000"
        android:scrollbarStyle="outsideOverlay" />

list_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:minHeight="40dip"
    android:singleLine="true"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_vertical"
/>

最も重要な header.xml

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dip"
    android:background="#F00"/>

しかし、うまくいかないようです。何も表示されません。

これについて何か提案はありますか?あなたの助けは非常に高く評価されています。

4

4 に答える 4

16

古い質問ですが、コピーして実行しただけで、実際に赤は表示されません。

単純なことが 1 つ欠けています。呼び出す方法に関係なく、インスタンス化するサブクラスを特定できるように、inflate常に1親ビュー (2 番目のパラメーター) を渡す必要があります。LayoutParams
1 : 常に1 つの例外があります

.inflate(R.layout.header, lv , false)

このテーマの詳細については、http: //www.doubleencore.com/2013/05/layout-inflation-as-intended/を強くお勧めします(数回読む価値があります) 。

完全なコードが変更されました (xml ファイルはそのままでかまいません):

public class MainActivity extends Activity {
    private static final String[] ADAPTER_DATA = {
            "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", "Angola"
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView list = (ListView) findViewById(R.id.list);
        View header = getLayoutInflater().inflate(R.layout.header, list, false);

        list.addHeaderView(header, null, false);
        list.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, ADAPTER_DATA));
    }
}
于 2014-09-16T11:04:13.403 に答える
13

これは私がヘッダーを追加する方法です:

    View view = View.inflate(context, R.layout.header, null);
    lv = (ListView) findViewById(R.id.list);


    lv.addHeaderView(view);
于 2012-10-22T05:48:34.157 に答える
1

別の xml ファイルでヘッダー ビューを宣言する必要があります。次に、それを View インスタンスにインフレートし、ListView に設定します。

View view = ... (inflate the view from xml file)
listview.addHeaderView(view)

リストビューへの setAdapter の前に addHeaderView を呼び出す必要があります。

于 2012-10-22T05:54:40.847 に答える