Câu trả lời:
Hãy thử cái này >>>
cho tất cả các mặt hàng
getExpandableListView().setGroupIndicator(null);
Trong xml
android:groupIndicator="@null"
Các android:groupIndicator
bất động sản có thể vẽ trạng thái kích hoạt. Đó là, bạn có thể đặt hình ảnh khác nhau cho các trạng thái khác nhau.
Khi nhóm không có con, trạng thái tương ứng là 'state_empty'
Xem các liên kết tham khảo sau:
Đối với state_empty
, bạn có thể đặt một hình ảnh khác mà không gây nhầm lẫn hoặc, chỉ cần sử dụng màu trong suốt để không hiển thị gì ...
Thêm mục này trong trạng thái có thể vẽ của bạn cùng với những người khác ....
<item android:state_empty="true" android:drawable="@android:color/transparent"/>
Vì vậy, danh sách thống kê của bạn có thể như thế này:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_empty="true" android:drawable="@android:color/transparent"/>
<item android:state_expanded="true" android:drawable="@drawable/my_icon_max" />
<item android:drawable="@drawable/my_icon_min" />
</selector>
Trong trường hợp bạn đang sử dụng ExpandableListActivity, bạn có thể đặt bộ chỉ mục nhóm trong onCreate như sau:
getExpandableListView().setGroupIndicator(getResources().getDrawable(R.drawable.my_group_statelist));
Tôi đã thử nghiệm điều này để làm việc.
Dựa trên câu trả lời của StrayPointer và mã từ blog, bạn có thể đơn giản hóa mã hơn nữa:
Trong xml của bạn, thêm phần sau vào ExpandableListView:
android:groupIndicator="@android:color/transparent"
Sau đó trong Bộ điều hợp bạn làm như sau:
@Override
protected void bindGroupView(View view, Context paramContext, Cursor cursor, boolean paramBoolean){
**...**
if ( getChildrenCount( groupPosition ) == 0 ) {
indicator.setVisibility( View.INVISIBLE );
} else {
indicator.setVisibility( View.VISIBLE );
indicator.setImageResource( isExpanded ? R.drawable.list_group_expanded : R.drawable.list_group_closed );
}
}
Bằng cách sử dụng phương thức setImageResource, bạn sẽ hoàn thành tất cả với một lớp lót. Bạn không cần ba mảng Số nguyên trong bộ điều hợp của mình. Bạn cũng không cần bộ chọn XML cho trạng thái được mở rộng và thu gọn. Tất cả được thực hiện thông qua Java.
Ngoài ra, cách tiếp cận này cũng hiển thị chỉ báo chính xác khi một nhóm được mở rộng theo mặc định, những gì không hoạt động với mã từ blog.
getGroupView()
phương pháp BaseExpandableListAdapter
triển khai của bạn . Hãy xem triển khai ví dụ này .
ViewHolder
khuôn mẫu. indicator
là tên biến của người giữ khung nhìn.
Như đã đề cập trong một câu trả lời khác, vì Android coi nhóm danh sách chưa mở rộng là trống, nên biểu tượng sẽ không được vẽ ngay cả khi nhóm có trẻ em.
Liên kết này đã giải quyết vấn đề cho tôi: http://mylifewithandroid.blogspot.com/2011/06/hiding-group-indicator-for-empty-groups.html
Về cơ bản, bạn phải đặt có thể vẽ mặc định là trong suốt, di chuyển có thể vẽ vào chế độ xem nhóm của bạn dưới dạng ImageView và chuyển đổi hình ảnh trong bộ điều hợp của bạn.
Trong mã của bạn, chỉ cần sử dụng xml tùy chỉnh cho danh sách nhóm và trong đó đặt ImageView cho GroupIndicator .
Và Thêm các mảng bên dưới vào ExpandableListAdapter của bạn
private static final int[] EMPTY_STATE_SET = {};
private static final int[] GROUP_EXPANDED_STATE_SET = { android.R.attr.state_expanded };
private static final int[][] GROUP_STATE_SETS = { EMPTY_STATE_SET, // 0
GROUP_EXPANDED_STATE_SET // 1
};
cũng trong phương thức của ExpandableListAdapter thêm những thứ tương tự như bên dưới
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
{
if (convertView == null)
{
LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.row_group_list, null);
}
//Image view which you put in row_group_list.xml
View ind = convertView.findViewById(R.id.iv_navigation);
if (ind != null)
{
ImageView indicator = (ImageView) ind;
if (getChildrenCount(groupPosition) == 0)
{
indicator.setVisibility(View.INVISIBLE);
}
else
{
indicator.setVisibility(View.VISIBLE);
int stateSetIndex = (isExpanded ? 1 : 0);
Drawable drawable = indicator.getDrawable();
drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
}
}
return convertView;
}
Tham khảo: http://mylifewithandroid.blogspot.in/2011/06/hiding-group-indicator-for-empty-groups.html
Trong XML
android:groupIndicator="@null"
Trong ExpandableListAdapter
-> getGroupView
sao chép mã sau
if (this.mListDataChild.get(this.mListDataHeader.get(groupPosition)).size() > 0){
if (isExpanded) {
arrowicon.setImageResource(R.drawable.group_up);
} else {
arrowicon.setImageResource(R.drawable.group_down);
}
}
đây có thể là một cách khác từ XML, đặt android:groupIndicator="@null"
Liên kết tham khảo: https://stackoverflow.com/a/5853520/2624806
gợi ý cho bạn giải pháp của tôi:
1) Xóa nhóm mặc định
<ExpandableListView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="240dp"
android:layout_gravity="start"
android:background="#cccc"
android:groupIndicator="@android:color/transparent"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
/>
2) trong ExpandableAdapter:
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = new TextView(context);
}
((TextView) convertView).setText(groupItem.get(groupPosition));
((TextView) convertView).setHeight(groupHeight);
((TextView) convertView).setTextSize(groupTextSize);
//create groupIndicator using TextView drawable
if (getChildrenCount(groupPosition)>0) {
Drawable zzz ;
if (isExpanded) {
zzz = context.getResources().getDrawable(R.drawable.arrowup);
} else {
zzz = context.getResources().getDrawable(R.drawable.arrowdown);
}
zzz.setBounds(0, 0, groupHeight, groupHeight);
((TextView) convertView).setCompoundDrawables(null, null,zzz, null);
}
convertView.setTag(groupItem.get(groupPosition));
return convertView;
}
Chỉ muốn cải thiện câu trả lời của Mihir Trivedi. Bạn có thể đặt cái này trong getGroupView () bên trong lớp MyExpandableListAdapter
View ind = convertView.findViewById(R.id.group_indicator);
View ind2 = convertView.findViewById(R.id.group_indicator2);
if (ind != null)
{
ImageView indicator = (ImageView) ind;
if (getChildrenCount(groupPosition) == 0)
{
indicator.setVisibility(View.INVISIBLE);
}
else
{
indicator.setVisibility(View.VISIBLE);
int stateSetIndex = (isExpanded ? 1 : 0);
/*toggles down button to change upwards when list has expanded*/
if(stateSetIndex == 1){
ind.setVisibility(View.INVISIBLE);
ind2.setVisibility(View.VISIBLE);
Drawable drawable = indicator.getDrawable();
drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
}
else if(stateSetIndex == 0){
ind.setVisibility(View.VISIBLE);
ind2.setVisibility(View.INVISIBLE);
Drawable drawable = indicator.getDrawable();
drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
}
}
}
... và đối với chế độ xem bố cục, đây là cách group_items.xml của tôi xuất hiện
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/group_heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:textSize="15sp"
android:textStyle="bold"/>
<ImageView
android:id="@+id/group_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/arrow_down_float"
android:layout_alignParentRight="true"
android:paddingRight="20dp"
android:paddingTop="20dp"/>
<ImageView
android:id="@+id/group_indicator2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/arrow_up_float"
android:layout_alignParentRight="true"
android:visibility="gone"
android:paddingRight="20dp"
android:paddingTop="20dp"/>
Hy vọng điều đó sẽ giúp ... nhớ để lại ủng hộ
Sử dụng điều này, nó hoàn toàn làm việc cho tôi.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/group_indicator_expanded" android:state_empty="false" android:state_expanded="true"/>
<item android:drawable="@drawable/group_indicator" android:state_empty="true"/>
<item android:drawable="@drawable/group_indicator"/>
</selector>
Bạn đã thử thay đổi ExpandableListView
thuộc tính của android:groupIndicator="@null"
chưa?
Đơn giản, bạn tạo một bố cục xml mới với height = 0 cho tiêu đề nhóm ẩn. Ví dụ: đó là 'group_list_item_empty.xml'
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="0dp">
</RelativeLayout>
Sau đó, bố cục tiêu đề nhóm bình thường của bạn là 'your_group_list_item_file.xml'
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal">
...your xml layout define...
</LinearLayout>
Cuối cùng, bạn chỉ cần cập nhật phương thức getGroupView trong Lớp tiếp hợp của mình:
public class MyExpandableListAdapter extends BaseExpandableListAdapter{
//Your code here ...
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup viewGroup) {
if (Your condition to hide the group header){
if (convertView == null || convertView instanceof LinearLayout) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.group_list_item_empty, null);
}
return convertView;
}else{
if (convertView == null || convertView instanceof RelativeLayout) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.your_group_list_item_file, null);
}
//Your code here ...
return convertView;
}
}
}
QUAN TRỌNG : Thẻ gốc của các tệp bố cục (ẩn và bình thường) phải khác nhau (như ví dụ trên, LinearLayout và RelativeLayout)
convertView.setVisibility (View.GONE) nên thực hiện thủ thuật.
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
DistanceHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.list_search_distance_header, parent, false);
if (getChildrenCount(groupPosition)==0) {
convertView.setVisibility(View.GONE);
}