0

我在擴展可擴展列表視圖時遇到問題。我想是這樣進行:如何在Expandable listview下填充不同的子項?

enter image description here

爲此,我以這樣的ListView項:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent" android:background="#112234" 
android:orientation="horizontal"> 

<CheckedTextView 
    android:id="@+id/checkedtextViewZoneItem" 
    android:layout_width="wrap_content" 
    android:layout_height="45dp" 
    android:paddingLeft="30dp" 
    android:paddingTop="10dp" 
    android:gravity="center_vertical" 
    android:drawableLeft="?android:attr/listChoiceIndicatorMultiple"/> 

<TextView 
    android:id="@+id/txtViewZoneItem" 
    android:layout_width="wrap_content" 
    android:layout_height="45dp" 
    android:background="#112234" 
    android:textColor="#C3C7D2" 
    android:textSize="18dip" 
    android:paddingTop="10dp"/>  

,並在我的UI對應我把一個GroupExpandListener 。我能夠獲得刪除按鈕點擊。但是,點擊該刪除按鈕後,我沒有找到任何方法來隱藏/顯示特定的組項複選框。對於單擊組頭我進行這樣的:

// Listview Group expanded listener 
    expListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 
     @Override 
     public void onGroupExpand(final int groupPosition) { 

      View parentView = expListView.findViewWithTag(groupPosition); 
      ImageView deleteZoneItem = (ImageView) parentView.findViewById(R.id.imageViewDeleteZoneItems); 
      deleteZoneItem.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View view) { 

        if(!expListView.isGroupExpanded(groupPosition)) { 
         Toast.makeText(ZoneListActivity.this, "expand", Toast.LENGTH_SHORT).show(); 
         expListView.expandGroup(groupPosition); 
        } 
       } 
      }); 


     } 
    }); 

請建議我一個解決方法或者我需要讓我的customAdapter類變更或我可以通過我的活動類只執行。

問候,

的Android野人

回答

0

它可以以這樣的方式進行: 你應該有延伸BaseExpandableAdapter自定義適配器;一個組對象,其中包含isDeletable布爾標誌,一個組名和一個子對象列表(在你的情況下 - 字符串)。

當用戶展開組時,您可以通過位置從適配器中檢索該組,並且如果按下刪除按鈕,則設置isDeletable標誌。

在適配器的getChildView方法中,您也可以回顧組,檢查標誌並設置複選框或您需要的可見性。

更新,樣本。 看看我的自定義適配器實現:

public class CustomAdapter extends BaseExpandableListAdapter { 

public static class GroupItem { 
    private String groupName; 
    private List<String> items; 
    private boolean isDeletable; 

    public GroupItem(String groupName, List<String> items) { 
     this.groupName = groupName; 
     this.items = items; 
    } 

    public String getGroupName() { 
     return groupName; 
    } 
    public List<String> getItems() { 
     return items; 
    } 

    public void setDeletable(boolean isDeletable) { 
     this.isDeletable = isDeletable; 
    } 
} 

private List<GroupItem> groups; 
private Context context; 

public CustomAdapter(Context context, List<GroupItem> groups) { 
    this.groups = groups; 
    this.context = context; 
} 

@Override 
public int getGroupCount() { 
    return groups.size(); 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return getGroup(groupPosition).getItems().size(); 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup container) { 
    if (convertView == null){ 
     convertView = LayoutInflater.from(context).inflate(R.layout.item_group, container, false); 
    } 

    ((TextView) convertView).setText(getGroup(groupPosition).getGroupName()); 

    return convertView; 
} 

@Override 
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup container) { 
    ChildViewHolder viewHolder; 
    if (convertView == null){ 
     convertView = LayoutInflater.from(context).inflate(R.layout.item_child, container, false); 
     viewHolder = new ChildViewHolder(); 
     viewHolder.text = (TextView)convertView.findViewById(R.id.textView); 
     viewHolder.checkbox = (CheckBox)convertView.findViewById(R.id.checkbox); 
     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ChildViewHolder)convertView.getTag(); 
    } 

    GroupItem group = getGroup(groupPosition); 
    String item = getChild(groupPosition, childPosition); 
    viewHolder.text.setVisibility(group.isDeletable ? View.GONE : View.VISIBLE); 
    viewHolder.checkbox.setVisibility(group.isDeletable ? View.VISIBLE : View.GONE); 

    return convertView; 
} 

@Override 
public GroupItem getGroup(int groupPosition) { 
    return groups.get(groupPosition); 
} 

@Override 
public String getChild(int groupPosition, int childPosition) { 
    return getGroup(groupPosition).getItems().get(childPosition); } 

}

viewHolder.text.setVisibility(group.isDeletable ? View.GONE : View.VISIBLE); 
viewHolder.checkbox.setVisibility(group.isDeletable ? View.VISIBLE : View.GONE); 

你想要做了什麼

您可以設置在相應的組isDeletable標誌與groupPosition retriving它(在你的例子)和之後再調用expandGroup

+0

我已經在使用BaseExpandableAdapter擴展一個類。第一個概率。這裏是我如何獲得getChildView方法中該java文件的刪除按鈕。即使我得到的點擊是否可以擴大標題或設置該按鈕點擊? – prdp89 2015-03-04 06:04:20

+0

@ prdp89請看看我更新的答案 – Beloo 2015-03-04 14:46:20