サンプルプログラム工場

AAKAKA Appで使われているプログラムのサンプルコードをそのまま公開!

サンプルプログラム工場 > android > [Android]リストビューのヘッダー/フッターにボタンを置く方法のサンプル#tryListView04
Google Play AAKAKAxSOFTへ

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

実行ファイル(APK)やサンプル(zip)をダウンロードする
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]値を変えたらそのまま保存、色選択プリファレンスアクティビティ...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>