2010年11月5日金曜日

Android 普通の LinearLayout で ExpandableListView っぽいのをつくる

前回のエントリ「Android ExpandableListView の子要素に EditText を入れるといろいろめんどい」で、ExpandableListView の中に EditText を入れるのは大変だと書きました。実は普通にやったほうが簡単だったりします。

キモは <include> タグ です。

こんなふうに同じレイアウトを何個も使う場合、<include> タグを使うとすっきりします。
<include> タグについては BootCamp のときにも話しました。
BootCamp を開催したよ。

サンプルでは、デフォルトのボタンを使ったのでダサいですが、そこはうまくカスタマイズしてください。




package yanzm.example.fakeexpandablelisttest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class FakeExpadableListTest extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

int groupIds[] = {R.id.group1, R.id.group2, R.id.group3, R.id.group4, R.id.group5, R.id.group6};

for(int i = 0 ; i < groupIds.length; i++) {
LinearLayout ll = (LinearLayout) findViewById(groupIds[i]);
Button button = (Button)ll.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinearLayout ll = (LinearLayout)v.getParent();
LinearLayout groupll = (LinearLayout)ll.findViewById(R.id.inputgroup);
switch(groupll.getVisibility()) {
case View.GONE:
groupll.setVisibility(View.VISIBLE);
break;
case View.VISIBLE:
groupll.setVisibility(View.GONE);
break;
}

((Button)v).setText("Hidden Group");
}
});
}
}
}



main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<include android:id="@+id/group1" layout="@layout/item" />
<include android:id="@+id/group2" layout="@layout/item" />
<include android:id="@+id/group3" layout="@layout/item" />
<include android:id="@+id/group4" layout="@layout/item" />
<include android:id="@+id/group5" layout="@layout/item" />
<include android:id="@+id/group6" layout="@layout/item" />
</LinearLayout>


item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
<
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Show Group"
/>

<LinearLayout
android:id="@+id/inputgroup"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="32dip"
android:visibility="gone"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="30dip"
android:layout_height="wrap_content"
android:text="住所"
android:layout_marginLeft="5dip"
/>
<EditText
android:id="@+id/edittext1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="text"
/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="30dip"
android:layout_height="wrap_content"
android:text="氏名"
android:layout_marginLeft="5dip"
/>
<EditText
android:id="@+id/edittext2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="text"
/>
</LinearLayout>
<RadioGroup
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男性"
/>
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女性"
/>
</RadioGroup>
</LinearLayout>
</LinearLayout>

0 件のコメント:

コメントを投稿