
[Android]リストビューのヘッダー/フッターにボタンを置く方法のサンプル#tryListView04

リストビューの一番下の項目にボタンを追加する。
そのボタンを押すとリストビューの項目が追加されていくような作りにする。
実際には項目を追加するわけではなく、リストビューのフッターとかヘッダーに別のレイアウトを登録する。
それが押された時とかに何か処理をするようにする。
addFotterViewはsetAdapter()の前に呼ばないといけない
addHeaderViewもあるよ
検索した事
android ListView 一部 別の項目
android ListView ボタン
addFotterView
android ListView LastItem
android ListView 一番下の項目
開発環境
Eclipse IDE バージョン: 4.2.1
package com.example.trylistview04; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.content.Context; import android.database.DataSetObserver; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; // ______________________________________________________________________________ /** * メインアクティビティ * */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // リストビューを取り出す ListView lv = (ListView)this.findViewById(R.id.listView1); // ListViewのFooterを追加 LayoutInflater inflater = this.getLayoutInflater(); View footer = inflater.inflate(R.layout.list_view_footer, null); // これはsetAdapterの前にやる lv.addFooterView(footer); // リストビューにアダプターをセットする final ListViewAdapter adapter = new ListViewAdapter(this); lv.setAdapter(adapter); // フッターのボタンを取り出す Button footerButton = (Button)footer.findViewById(R.id.listViewFooter_button1); footerButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { adapter.add("追加されました。"); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } // ______________________________________________________________________________ /** * ビューホルダー * */ class ViewHolder { TextView text; } // ______________________________________________________________________________ /** * リストビューアダプター * */ class ListViewAdapter extends ArrayAdapter<String> { private Activity mOwner; // オーナーアクティビティ //______________________________________________________________________________ /** * コンストラクタ * @param activity アクティビティ */ public ListViewAdapter(Activity activity) { super(activity, R.layout.list_view_item); // オーナーのアクティビティをとっておく this.mOwner = activity; } //______________________________________________________________________________ @Override public View getView(int position, View view, ViewGroup parent) { // ビューホルダー ViewHolder holder = null; // 無い場合だけ作る if (view == null) { // XMLからレイアウトを作る LayoutInflater inflater = this.mOwner.getLayoutInflater(); view = inflater.inflate(R.layout.list_view_item, parent, false); // ビューホルダーを作る holder = new ViewHolder(); // テキストビューを取り出す holder.text = (TextView)view.findViewById(R.id.listViewItem_textView1); // ビューにホルダーを登録する view.setTag(holder); // もう作られているときはそっちから取り出す } else { // 登録されているモノを使う holder = (ViewHolder)view.getTag(); } // 関連付けられたものを取り出す String title = (String)this.getItem(position); // 設定するためのデータが取り出せた if (title != null) { // ホルダーに登録する holder.text.setText(title); } return view; } /** * これしないとリリースしまくってエラーになる * Adapterには必要らしいandroid4.0.3のバグだとか */ @Override public void unregisterDataSetObserver(DataSetObserver observer) { if (observer != null) { super.unregisterDataSetObserver(observer); } } }
メインレイアウト
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" > </ListView> </RelativeLayout> 1 ListViewのフッターにセットするレイアウト 1 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/listViewFooter_button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout>
リストビューの項目のレイアウト
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/listViewItem_textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> <View android:id="@+id/view1" android:layout_width="wrap_content" android:layout_height="1dp" android:background="#ff9088aa" /> </LinearLayout>
[Android]縦持ちカメラのプレビュー画面にSurfaceViewをオーバーレイさせ... [Android]値を変えたらそのまま保存、色選択プリファレンスアクティビティ...