リストビュー各行にボタンを配置したいと思います
基本的に解説はしますが前回作成したものをベースに作りこみたいと思いますw
リスト項目のレイアウトを自由にカスタマイズ(2)
まずは1行分のリストビューのレイアウト作成です
textViewとbuttonを1つずつ配置しました
textViewにweightを持たせbuttonを右側に寄せています
list.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:layout_weight="1"/> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout>
次にmain.xmlですがこれは単にListviewのみ配置したものを用意しました
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/listView1" android:layout_width="fill_parent" android:layout_height="wrap_content" > </ListView> </LinearLayout>
さいごにMainActivity.javaですがこれも前回同様に独自に作成したクラス
private class ListMemberAdapterの中身を変更します
特に難しいことは行わず、textViewとButtonを指定して表示させる文字を
入力しただけです
MainActivity.java
package blog.test; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { //独自クラスMemberを作成 private class Member { private String name; public Member(String name) { this.name = name; } public String getName() { return name; } } //BaseAdapterを拡張した独自Adapterの定義 private class ListMemberAdapter extends BaseAdapter { private Context context; private Listinflaterを使い作成したlist.xmlを指定して表示させていますlist; public ListMemberAdapter(Context context) { super(); this.context = context; //ListにMemberを追加する //追加にはMemberクラスを使用 list = new ArrayList (); list.add(new Member("Ichiro")); list.add(new Member("Matsui")); list.add(new Member("Darvish")); } public int getCount() { return list.size(); } public Object getItem(int position) { return list.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { Member member = (Member) getItem(position); TextView tvName; Button mapButton; View v = convertView; if(v==null){ LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = inflater.inflate(R.layout.list, null); } if(member != null){ tvName = (TextView) v.findViewById(R.id.textView1); mapButton = (Button) v.findViewById(R.id.button1); tvName.setText("Name : "+member.getName()); mapButton.setText("Map"); } return v; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView lv = new ListView(this); setContentView(lv); lv.setAdapter(new ListMemberAdapter(this)); } }
独自クラスMemberではただ単にnameのみを保持するクラスです
これを実行すると・・・
このようにボタンが配置されているのがわかります
buttonのイベント取得は次回にしますww
スポンサードリンク