Jawaban:
Coba ini >>>
untuk semua item
getExpandableListView().setGroupIndicator(null);
Dalam xml
android:groupIndicator="@null"
The android:groupIndicator
properti membutuhkan ditarik diaktifkan negara. Artinya, Anda dapat mengatur gambar yang berbeda untuk keadaan yang berbeda.
Jika grup tidak memiliki anak, status terkait adalah 'state_empty'
Lihat tautan referensi ini:
Sebab state_empty
, Anda dapat mengatur gambar berbeda yang tidak membingungkan, atau, cukup gunakan warna transparan untuk tidak menampilkan apa-apa ...
Tambahkan item ini di stateful drawable Anda bersama dengan item lain ....
<item android:state_empty="true" android:drawable="@android:color/transparent"/>
Jadi, statelist Anda bisa seperti ini:
<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>
Jika Anda menggunakan ExpandableListActivity, Anda dapat menyetel indikator grup di onCreate sebagai berikut:
getExpandableListView().setGroupIndicator(getResources().getDrawable(R.drawable.my_group_statelist));
Saya telah menguji ini untuk bekerja.
Berdasarkan jawaban StrayPointer dan kode dari blog, Anda dapat lebih menyederhanakan kode tersebut:
Di xml Anda, tambahkan berikut ini ke ExpandableListView:
android:groupIndicator="@android:color/transparent"
Kemudian di Adaptor Anda melakukan hal berikut:
@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 );
}
}
Dengan menggunakan metode setImageResource, Anda menyelesaikan semuanya dengan satu baris. Anda tidak memerlukan tiga larik Integer di adaptor Anda. Anda juga tidak memerlukan pemilih XML untuk status diperluas dan diciutkan. Semua dilakukan melalui Java.
Plus, pendekatan ini juga menampilkan indikator yang benar ketika grup yang diperluas secara default yang tidak berfungsi dengan kode dari blog.
getGroupView()
metode BaseExpandableListAdapter
penerapan Anda . Lihat contoh implementasi ini .
ViewHolder
polanya. indicator
adalah nama variabel pemegang tampilan.
Seperti yang disebutkan dalam jawaban berbeda, karena Android memperlakukan grup daftar yang tidak diperluas sebagai kosong, ikon tidak digambar meskipun grup tersebut memiliki turunan.
Tautan ini memecahkan masalah bagi saya: http://mylifewithandroid.blogspot.com/2011/06/hiding-group-indicator-for-empty-groups.html
Pada dasarnya Anda harus menyetel drawable default sebagai transparan, memindahkan drawable ke tampilan grup Anda sebagai ImageView dan mengalihkan gambar di adaptor Anda.
Dalam kode Anda, cukup gunakan xml khusus untuk daftar grup dan di situ letakkan ImageView untuk GroupIndicator .
Dan Tambahkan array di bawah ini di ExpandableListAdapter Anda
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
};
juga dalam metode ExpandableListAdapter menambahkan hal yang sama seperti di bawah ini
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;
}
Referensi: http://mylifewithandroid.blogspot.in/2011/06/hiding-group-indicator-for-empty-groups.html
Dalam XML
android:groupIndicator="@null"
Di ExpandableListAdapter
-> getGroupView
salin kode berikut
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);
}
}
ini bisa menjadi cara lain dari XML, set android:groupIndicator="@null"
Tautan Referensi: https://stackoverflow.com/a/5853520/2624806
Sarankan solusi saya:
1) Hapus grup defaultIndikator:
<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) di 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;
}
Hanya ingin memperbaiki jawaban Mihir Trivedi. Anda bisa menempatkan ini dalam getGroupView () yang ada di dalam kelas 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]);
}
}
}
... dan untuk tampilan tata letak, ini adalah tampilan group_items.xml saya
<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"/>
Harapan yang membantu ... ingatlah untuk memberikan suara positif
Gunakan ini, ini bekerja dengan sempurna untuk saya.
<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>
Sudahkah Anda mencoba mengubah ExpandableListView
atribut android:groupIndicator="@null"
?
Sederhananya, Anda membuat tata letak xml baru dengan height = 0 untuk header grup tersembunyi. Misalnya, '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>
Kemudian tata letak header grup normal Anda adalah '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>
Terakhir, Anda baru saja memperbarui metode getGroupView di Kelas Adaptor Anda:
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;
}
}
}
PENTING : Tag root dari file tata letak (tersembunyi dan normal) harus berbeda (seperti contoh di atas, LinearLayout dan RelativeLayout)
convertView.setVisibility (View.GONE) harus melakukan triknya.
@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);
}