ボタンの機能をLISTVIEWへ詰め込んでLISTVIEWを小さくして、いろいろなボタンを機能させる仕組み

サンプル

activity_main.xml

    
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:tools="http://schemas.android.com/tools"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	tools:context=".MainActivity">

	<ListView android:id="@+id/listview"
			android:layout_width="fill_parent"
			android:layout_height="fill_parent"
			android:choiceMode="multipleChoice"/>
</LinearLayout>

MainActivity.java

                    
public class MainActivity extends AppCompatActivity {
    ListView listView;

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

        // リストビュー設定
        listView = (ListView) this.findViewById(R.id.listview);
        List<Map<String, String>> dataList = new ArrayList<Map<String, String>>();

        Map<String, String> data = new HashMap<String, String>();

        // 20個のボタンリストを作成する。
        for (int i = 1; i <= 20; i++) {
            data.put("title", "機能"+String.valueOf(i));
            data.put("button", "実行"+String.valueOf(i));
            dataList.add(data);
            data = new HashMap<String, String>();
        }
        // リストボタン作成
        ListButton adapter = new ListButton(
                this,
                dataList,
                R.layout.row,
                new String[]{"title", "button"},
                new int[]{android.R.id.text1,
                        android.R.id.text2}, this);

        listView.setAdapter(adapter);

    }
}
                                    

ListButton.java

    
public class ListButton extends SimpleAdapter {

    // private Context context;
    private LayoutInflater inflater;
    private List<? extends Map<String, ?>> listData;
    MainActivity frag;
    boolean flag = false;


    public class ViewHolder {
        TextView line1;
    }

    public ListButton(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to, MainActivity ft) {
        super(context, data, resource, from, to);
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.listData = data;
        frag = ft;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        // ビューを受け取る
        View view;

        // タイトルとボタンのVIEW取得
        view = inflater.inflate(R.layout.row, parent, false);
        holder = new ViewHolder();
        holder.line1 = (TextView) view.findViewById(android.R.id.text1);
        view.setTag(holder);
        // タイトル設定
        String text1 = ((HashMap<?, ?>) listData.get(position)).get("title").toString();
        holder.line1.setText(text1);
        // ボタン設定
        Button btn;
        btn = (Button) view.findViewById(R.id.button1);
        btn.setText(((HashMap<?, ?>) listData.get(position)).get("button").toString());
        btn.setTag(position);

        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // ボタン押された場所一番上から0~19の番号が通知される。
                String str = String.valueOf(position);
                Toast.makeText(frag,str,Toast.LENGTH_LONG).show();
            }
        });

        return view;
    }
}

row.xml

    
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@android:id/text1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="TextView"
            android:textSize="18dp" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />

    </LinearLayout>

</LinearLayout>