私はアプリケーションを開発しています。私のアプリケーションでは、dom解析を使用してデータを表示するためにリストビューを使用しています。リストビューにフッターを付けたいです。プロセス、image1とimgae2を参照してください。赤い四角形のフッターについて説明します
「その他のニュース」のようなFig1-Footer
図2-リストビューに追加された10レコードを追加
回答:
フッターとして設定するテキストで構成されるフッタービューレイアウトを作成して、
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);
}
}
NOTE: Call this before calling setAdapter. This is so ListView can wrap the supplied cursor with one that will also account for header and footer views.
ここでの回答は少し時代遅れです。コードは同じままですが、動作にいくつかの変更があります。
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()
。これにより、ListViewは、指定されたカーソルを、ヘッダービューとフッタービューも考慮するカーソルでラップできます。
キットカットからこれは変更されました。
注:最初に導入されたとき、このメソッドはsetAdapter(ListAdapter)でアダプタを設定する前にのみ呼び出すことができました。KITKAT以降、このメソッドはいつでも呼び出すことができます。ListViewのアダプターがHeaderViewListAdapterを拡張しない場合、WrapperListAdapterのサポートインスタンスでラップされます。
私はこれが非常に古い質問であることを知っていますが、gcl1が言及したように、この方法ではフッターは実際には画面へのフッターではないため、ここでは自分の方法をググったところ、100%満足のいく答えが得られなかったことがわかりました。これは単なる「アドオン」です。 "リストへ。
結論 -ここでグーグルするかもしれない他の人のために-私はここに次の提案を見つけました: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>
リストビューフッターを追加するアクティビティと、リストビューフッターのクリック時にイベントを生成します。
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>
この質問では、最善の答えは私にはうまくいきません。その後、私はこのメソッドを見つけてリストビューフッターを表示しました、
LayoutInflater inflater = getLayoutInflater();
ViewGroup footerView = (ViewGroup)inflater.inflate(R.layout.footer_layout,listView,false);
listView.addFooterView(footerView, null, false);
そして、新しいレイアウト呼び出しfooter_layoutを作成します
<?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">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Done"
android:textStyle="italic"
android:background="#d6cf55"
android:padding="10dp"/>
</LinearLayout>
動作しない場合は、この記事を参照して聞いてください
あなたはstackLayoutを使用することができ、このレイアウトの内側にリストをフレームに入れることができます、例えば:
<StackLayout VerticalOptions="FillAndExpand">
<ListView ItemsSource="{Binding YourList}"
CachingStrategy="RecycleElement"
HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell >
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Image, Mode=TwoWay}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Frame BackgroundColor="AliceBlue" HorizontalOptions="FillAndExpand">
<Button Text="More"></Button>
</Frame>
</StackLayout>
これが結果です: