Và có thể tùy chỉnh trẻ trong danh sách có thể mở rộng không?Làm thế nào để thêm hình ảnh trong danh sách mở rộng trong phụ huynh trong android?
Trả lời
Làm việc với SimpleExpandableListAdapter
là mọi thứ nhưng đơn giản. Dưới đây là một số mã sẽ giúp bạn bắt đầu, giả sử bạn đang sử dụng ExpandableListActivity
.
Trong ví dụ này, chúng tôi sử dụng tiêu chuẩn android.R.layout.simple_expandable_list_item_1
cho chế độ xem tiêu đề nhóm của chúng tôi, nhưng chúng tôi sử dụng bố cục tùy chỉnh của riêng chúng tôi cho trẻ em.
// Construct Expandable List
final String NAME = "name";
final String IMAGE = "image";
final LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ArrayList<HashMap<String, String>> headerData = new ArrayList<HashMap<String, String>>();
final HashMap<String, String> group1 = new HashMap<String, String>();
group1.put(NAME, "Group 1");
headerData.add(group1);
final HashMap<String, String> group2 = new HashMap<String, String>();
group2.put(NAME, "Group 2");
headerData.add(group2);
final ArrayList<ArrayList<HashMap<String, Object>>> childData = new ArrayList<ArrayList<HashMap<String, Object>>>();
final ArrayList<HashMap<String, Object>> group1data = new ArrayList<HashMap<String, Object>>();
childData.add(group1data);
final ArrayList<HashMap<String, Object>> group2data = new ArrayList<HashMap<String, Object>>();
childData.add(group2data);
// Set up some sample data in both groups
for(int i=0; i<10; ++i) {
final HashMap<String, Object> map = new HashMap<String,Object>();
map.put(NAME, "Child " + i);
map.put(IMAGE, getResources().getDrawable(R.drawable.icon));
(i%2==0 ? group1data : group2data).add(map);
}
setListAdapter(new SimpleExpandableListAdapter(
this,
headerData,
android.R.layout.simple_expandable_list_item_1,
new String[] { NAME }, // the name of the field data
new int[] { android.R.id.text1 }, // the text field to populate with the field data
childData,
0,
null,
new int[] {}
) {
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
final View v = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent);
// Populate your custom view here
((TextView)v.findViewById(R.id.name)).setText((String) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(NAME));
((ImageView)v.findViewById(R.id.image)).setImageDrawable((Drawable) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(IMAGE));
return v;
}
@Override
public View newChildView(boolean isLastChild, ViewGroup parent) {
return layoutInflater.inflate(R.layout.expandable_list_item_with_image, null, false);
}
}
);
Và bên trong bố trí con tùy chỉnh của bạn, tên expandable_list_item_with_image.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right" />
</RelativeLayout>
Bạn có thể thử làm bộ chuyển đổi danh sách của riêng bạn mà kéo dài BaseExpandableListAdapter chỉ thích được mô tả trong documentation.
Sau đó ghi đè hàm getGroupView(..)
(cho mục cha hoặc getChildView cho mục con) và trong hàm này, bạn có thể tăng bố cục xml của riêng mình.
một cái gì đó như thế này:
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent)
{
View v = convertView;
if (v == null) {
//sender is activity from where you call this adapter. Set it with construktor.
LayoutInflater vi = (LayoutInflater)sender.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
//children = arraylists of Child
Child c = children.get(childPosition);
if (c != null) {
TextView tt = (TextView) v.findViewById(R.id.toptext);
TextView bt = (TextView) v.findViewById(R.id.bottomtext);
ImageView icon = (ImageView) v.findViewById(R.id.rowicon);
if (tt != null) {
tt.setText(c.text1); }
if(bt != null){
bt.setText(c.text2);
}
if (icon != null)
{
icon.setImageResource(R.drawable.rowicon);
}
}
return v;
}
layout 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="?android:attr/listPreferredItemHeight"
android:padding="6dip">
<ImageView
android:id="@+id/rowicon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="6dip" />
<LinearLayout
android:orientation="vertical"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="fill_parent">
<TextView
android:id="@+id/toptext"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center_vertical"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:id="@+id/bottomtext"
android:singleLine="true"
android:ellipsize="marquee"
/>
</LinearLayout>
</LinearLayout>
Sau khi bạn ghi đè getGroupView, bạn có thể sử dụng chức năng setCompoundDrawablesWithIntrinsicBounds
để thêm hình ảnh.
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
{
View v = super.getGroupView(groupPosition, isExpanded, convertView, parent);
TextView tv = (TextView) v.findViewById(R.id.textViewId);
tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.imageToAdd, 0, 0, 0);
return v;
}
tôi chỉ tìm thấy một cách tốt hơn, bạn chỉ có thể thêm
android:drawableRight="@drawable/icon"
dòng để bố trí tập tin xml của nhóm danh sách.
hoạt động như một nét duyên dáng..Đơn giản và tốt nhất – Prabs
Hãy thử điều này >>> Tutorial
Và bạn có thể cập nhật nó để thêm hình ảnh thay vì văn bản trong tập tin xml con
câu trả lời tuyệt vời, nên được chấp nhận – tomash
Chỉ muốn nói rằng đây là một ví dụ tuyệt vời, nó thực sự hữu ích! Cảm ơn bạn –
@emmby xin chào cách thêm hình ảnh và văn bản khác nhau cho từng đứa con của cha mẹ, tức là – Sultan