2010-11-24 36 views
84

私はアプリケーションを開発していますが、私のアプリケーションでは、DOM解析を使用してデータを表示するためにListviewを使用しています。リストビューでフッターを追加したいときはフッターを追加すると追加のデータがリストビューに追加されます。 "その他のニュース" のようなListViewにフッターを追加する方法は?

FIG1-フッターを設計し、プロセスは、イメージ1を参照してくださいとimgae2.Iは赤い長方形でフッターを言及
​​

alt text

FIG2-追加10レコードがに追加された追加リストビュー

答えて

199

フッターとして設定し、フッターの

View footerView = ((LayoutInflater) ActivityContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false); 
ListView.addFooterView(footerView); 

レイアウトは、このようなものかもしれない試してみたいテキストからなるフッタビューのレイアウトを作成します。アクティビティクラスは可能性があり

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingTop="7dip" 
    android:paddingBottom="7dip" 
    android:orientation="horizontal" 
    android:gravity="center"> 

    <LinearLayout 
     android:id="@+id/footer_layout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:gravity="center" 
     android:layout_gravity="center"> 

    <TextView 
     android:text="@string/footer_text_1" 
     android:id="@+id/footer_1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="14dip" 
     android:textStyle="bold" 
     android:layout_marginRight="5dip" /> 
    </LinearLayout> 
</LinearLayout> 

を:

public class MyListActivty extends ListActivity { 
    private Context context = null; 
    private ListView list = null; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     list = (ListView)findViewById(android.R.id.list); 

     //code to set adapter to populate list 
     View footerView = ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false); 
     list.addFooterView(footerView); 
    } 
} 
+6

これは良いですが、何を、フッターではなく下にスクロールしたときにのみ表示さよりも、画面上に固定されるようにしたい場合は?リストが空であってもフッターが表示されるようにするにはどうすればよいでしょうか? http://stackoverflow.com/questions/12353701/fixed-and-always-visible-footer-below-listfragmentの完全な質問を参照してください。 – gcl1

+30

私はこのコードを動作させて解決したいくつかの問題を抱えていました。 addFooterView()のドキュメントで '注釈:setAdapterを呼び出す前にこれを呼び出します。これは、ListViewが、ヘッダとフッタのビューも考慮に入れたもので、提供されたカーソルを囲むことができるようにするためです。 ' – demosten

+13

@ gcl1この場合、それはフッタではなく、レイアウト内のリストビューの下にある普通の要素です。ちょうど、あなたが知っている、それをリストビューの下に置く? – Davor

9

私は、これは非常に古い質問ですけど、私はここで自分の道をGoogleで検索して回答PRを見つけましたgcl1が述べたように、この方法ではフッターは実際に画面のフッターではありません。これは単にリストの「アドオン」に過ぎません。

ボトムライン - - ここに自分の道をGoogleは他の人のために私はここで、以下の提案が見つかりました:Fixed and always visible footer below ListFragment

強調に最初にリストされているボタン(または任意のフッター要素)である場合、次のようにやってみXML - その後、リストは、「layout_above」として追加されます。

<RelativeLayout> 

<Button android:id="@+id/footer" android:layout_alignParentBottom="true"/> 
<ListView android:id="@android:id/list" **android:layout_above**="@id/footer"> <!-- the list --> 

</RelativeLayout> 
2

あなたはリストビューフッタを追加したいと私はまた、リストビューのフッターをクリックしたときにイベントを生成しているれている活動。

public class MainActivity extends Activity 
{ 

     @Override 
     protected void onCreate(Bundle savedInstanceState) 
     { 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      ListView list_of_f = (ListView) findViewById(R.id.list_of_f); 

      LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      View view = inflater.inflate(R.layout.web_view, null); // i have open a webview on the listview footer 

      RelativeLayout layoutFooter = (RelativeLayout) view.findViewById(R.id.layoutFooter); 

      list_of_f.addFooterView(view); 

     } 

} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/bg" > 

    <ImageView 
     android:id="@+id/dept_nav" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/dept_nav" /> 

    <ListView 
     android:id="@+id/list_of_f" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/dept_nav" 
     android:layout_margin="5dp" 
     android:layout_marginTop="10dp" 
     android:divider="@null" 
     android:dividerHeight="0dp" 
     android:listSelector="@android:color/transparent" > 
    </ListView> 

</RelativeLayout> 
5

のListViewがListActivityの子である場合:

getListView().addFooterView(
    getLayoutInflater().inflate(R.layout.footer_view, null) 
); 

(内部のonCreate())ここで

8

回答は少し古くなっています。コードは同じままですが、動作にはいくつかの変更があります。

public class MyListActivity extends ListActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     TextView footerView = (TextView) ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_view, null, false); 
     getListView().addFooterView(footerView); 
     setListAdapter(new ArrayAdapter<String>(this, getResources().getStringArray(R.array.news))); 
    } 
} 

情報についてaddFooterView()方法は、リストの一番下に表示されるように固定ビューを追加します。 addFooterView()が複数回呼び出された場合、ビューは追加された順に表示されます。この呼び出しを使用して追加されたビューは、必要に応じてフォーカスを取得できます。

はストレスに非常に重要なポイント上記の回答のほとんどは -

addFooterView()setAdapter() .Thisを呼び出す前に呼び出さなければなりませんので、リストビューにもヘッダーとフッターのビューを占めることになる1付属のカーソルをラップすることができています。

これは変更されました。

注:このメソッドは、初めて導入されたときにsetAdapter(ListAdapter)を使用してアダプタを設定する前に呼び出すことができます。 KITKATから始めて、いつでもこのメソッドを呼び出すことができます。 ListViewのアダプタがHeaderViewListAdapterを拡張しない場合は、WrapperListAdapterのサポートされたインスタンスでラップされます。

Documentation

関連する問題