Yanıtlar:
Bunu deneyin >>>
tüm öğeler için
getExpandableListView().setGroupIndicator(null);
Xml olarak
android:groupIndicator="@null"
android:groupIndicator
Tesiste durumunun etkin çekilebilir sürer. Yani, farklı durumlar için farklı görüntü ayarlayabilirsiniz.
Grubun çocuğu olmadığında, karşılık gelen durum 'state_empty'dir.
Şu referans bağlantılarına bakın:
Çünkü state_empty
, kafa karıştırıcı olmayan farklı bir görüntü ayarlayabilir veya hiçbir şey göstermemek için sadece şeffaf renk kullanabilirsiniz ...
Bu öğeyi başkalarıyla birlikte durumlu çekilebilir dosyanıza ekleyin ...
<item android:state_empty="true" android:drawable="@android:color/transparent"/>
Dolayısıyla, istatistik listeniz şu şekilde olabilir:
<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>
Bir ExpandableListActivity kullanıyorsanız, grup göstergesini onCreate içinde aşağıdaki gibi ayarlayabilirsiniz:
getExpandableListView().setGroupIndicator(getResources().getDrawable(R.drawable.my_group_statelist));
Bunun çalıştığını test ettim.
StrayPointer'ın cevabına ve blogdaki koda dayanarak kodu daha da basitleştirebilirsiniz:
Xml'nizde aşağıdakileri ExpandableListView'a ekleyin:
android:groupIndicator="@android:color/transparent"
Ardından Adaptörde şunları yaparsınız:
@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 );
}
}
SetImageResource yöntemini kullanarak, hepsini tek bir satırla halledersiniz. Adaptörünüzde üç Tamsayı dizisine ihtiyacınız yoktur. Ayrıca, genişletilmiş ve daraltılmış durum için bir XML seçiciye ihtiyacınız yoktur. Hepsi Java ile yapılır.
Ayrıca bu yaklaşım, bir grup varsayılan olarak genişletildiğinde blogdaki kodla çalışmayan doğru göstergeyi de görüntüler.
getGroupView()
yönteminizde kullanılmak üzere tasarlanmıştır BaseExpandableListAdapter
. Bu örnek uygulamaya bir göz atın .
ViewHolder
deseni. indicator
görünüm sahibinin değişken adıdır.
Farklı bir yanıtta belirtildiği gibi, Android genişlemeyen bir liste grubunu boş olarak değerlendirdiğinden, grubun alt öğeleri olsa bile simge çizilmez.
Bu bağlantı benim için sorunu çözdü: http://mylifewithandroid.blogspot.com/2011/06/hiding-group-indicator-for-empty-groups.html
Temel olarak, varsayılan çekilebilirliği şeffaf olarak ayarlamanız, çekilebilirliği bir ImageView olarak grup görünümünüze taşımanız ve bağdaştırıcınızdaki resmi değiştirmeniz gerekir.
Kodunuzda sadece grup listesi için özel xml kullanmak ve bu koymak ImageView için GroupIndicator .
Ve ExpandableListAdapter'ınıza aşağıdaki dizileri ekleyin
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
};
Ayrıca ExpandableListAdapter yönteminde aşağıdaki gibi aynı şeyleri ekleyin
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;
}
Referans: http://mylifewithandroid.blogspot.in/2011/06/hiding-group-indicator-for-empty-groups.html
XML olarak
android:groupIndicator="@null"
İçinde ExpandableListAdapter
-> getGroupView
aşağıdaki kodu kopyala
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);
}
}
bu XML'den başka bir yol olabilir android:groupIndicator="@null"
Referans Bağlantısı: https://stackoverflow.com/a/5853520/2624806
size çözümümü öneriyorum:
1) Varsayılan grup Göstergesini temizle:
<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) ExpandableAdapter'da:
@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;
}
Mihir Trivedi'nin cevabını geliştirmek istedim. Bunu MyExpandableListAdapter sınıfının içindeki getGroupView () içine yerleştirebilirsiniz.
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]);
}
}
}
... ve düzen görünümüne gelince, group_items.xml dosyam şöyle görünüyor
<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"/>
Umarım yardımcı olur ... olumlu oy bırakmayı unutmayın
Bunu kullanın, benim için mükemmel çalışıyor.
<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>
ExpandableListView
'In özniteliğini değiştirmeyi denediniz android:groupIndicator="@null"
mi?
Basitçe, gizli grup başlığı için yükseklik = 0 ile yeni bir xml düzeni oluşturursunuz. Örneğin, "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>
O zaman normal grup başlık düzeniniz 'grubunuz_listesi_item_dosyanız.xml'dir'
<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>
Son olarak, Adaptör Sınıfınızdaki getGroupView yöntemini güncellemeniz yeterlidir:
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;
}
}
}
ÖNEMLİ : Düzen dosyalarının kök etiketi (gizli ve normal) farklı olmalıdır (yukarıdaki örnekte olduğu gibi, LinearLayout ve RelativeLayout)
convertView.setVisibility (View.GONE) hile yapmalı.
@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);
}