2

我開發了一個Android應用程序,所以我試圖使用ExpandableListView爲每個孩子使用兩種不同的佈局。但我有一個問題,似乎無法解決它。我認爲問題在於我沒有找到合適的孩子。兩個孩子同時顯示兩種佈局。如何在ExpandableListView中爲子項添加不同的佈局?

This my class Adapter

public class ExpandListAdapter extends BaseExpandableListAdapter { 

private Context context; 
private ArrayList<ExpandListGroup> groups; 
public ExpandListAdapter(Context context, ArrayList<ExpandListGroup> groups) { 
this.context = context; 
this.groups = groups; 
} 

public void addItem(ExpandListChild item, ExpandListGroup group) { 
if (!groups.contains(group)) { 
groups.add(group); 
} 
int index = groups.indexOf(group); 
ArrayList<ExpandListChild> ch = groups.get(index).getItems(); 
ch.add(item); 
groups.get(index).setItems(ch); 
} 
public Object getChild(int groupPosition, int childPosition) { 
//TODO Auto-generated method stub 
ArrayList<ExpandListChild> chList = groups.get(groupPosition).getItems(); 
return chList.get(childPosition); 
} 
@Override 
public int getChildTypeCount() { 
return 2; 
} 

public long getChildId(int groupPosition, int childPosition) { 
//TODO Auto-generated method stub 
//return childPosition; 
return (long)(groupPosition*50+childPosition); 
} 
@Override 
public int getChildType(int groupPosition, int childPosition) 
{ 
int result = 0; 
if (childPosition == getChildrenCount(groupPosition)-1) 
result = 1; 

return result; 
} 


public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view, 
ViewGroup parent) { 
TextView textView = null; 
ExpandListChild child = (ExpandListChild) getChild(groupPosition, childPosition); 
/* if (view == null) { 
if(childPosition == 0){ 
LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
view = infalInflater.inflate(R.layout.expandlist_child_item, null);} 
else if (childPosition == 1){ 
LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
view = infalInflater.inflate(R.layout.child2, null); 

} 
}*/ 

if (view == null) { 
int itemType = getChildType(groupPosition,childPosition); 
LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
//view = infalInflater.inflate(R.layout.expandlist_child_item, null); 

if(itemType == 0) 
{ 


view = infalInflater.inflate(R.layout.expandlist_child_item, null); 
textView = (TextView) view.findViewById(R.id.tvChild); 
textView.setText("0"); 
//textView.setTag(child.getTag()); 
} 
else 
{ view = infalInflater.inflate(R.layout.child2, null); 
textView = (TextView) view.findViewById(R.id.tvChild1); 
textView.setText("1"); 
textView.setTag(child.getTag());} 
/* 
switch (itemType) { 
case 0: 
{ view = infalInflater.inflate(R.layout.expandlist_child_item, null); 
textView = (TextView) view.findViewById(R.id.tvChild); 
textView.setText("0"); 
//textView.setTag(child.getTag()); 
break;} 
case 1: 
{ view = infalInflater.inflate(R.layout.child2, null); 
textView = (TextView) view.findViewById(R.id.tvChild1); 
textView.setText("1"); 
textView.setTag(child.getTag()); 
break;} 
} 
*/ 

//textView.setPadding(30,20,30,20); 


} 

//TODO Auto-generated method stub 
return view; 
} 

public int getChildrenCount(int groupPosition) { 
//TODO Auto-generated method stub 
ArrayList<ExpandListChild> chList = groups.get(groupPosition).getItems(); 

return chList.size(); 

} 

public Object getGroup(int groupPosition) { 
//TODO Auto-generated method stub 
return groups.get(groupPosition); 
} 

public int getGroupCount() { 
//TODO Auto-generated method stub 
return groups.size(); 
} 

public long getGroupId(int groupPosition) { 
//TODO Auto-generated method stub 
return groupPosition; 
} 

public View getGroupView(int groupPosition, boolean isLastChild, View view, 
ViewGroup parent) { 
ExpandListGroup group = (ExpandListGroup) getGroup(groupPosition); 
if (view == null) { 
LayoutInflater inf = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
view = inf.inflate(R.layout.expandlist_group_item, null); 
} 
TextView tv = (TextView) view.findViewById(R.id.tvGroup); 
tv.setText(group.getName()); 
//TODO Auto-generated method stub 
return view; 
} 

public boolean hasStableIds() { 
//TODO Auto-generated method stub 
return true; 
} 

public boolean isChildSelectable(int arg0, int arg1) { 
//TODO Auto-generated method stub 
return true; 
} 

child2.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 




     <TextView 
     android:id="@+id/tvChild1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textColor="@color/Black" 
     android:textSize="17sp" > 
    </TextView> 



    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/b1" /> 

    <CheckBox 
     android:id="@+id/checkBox1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/checkboxh" /> 

    <RadioButton 
     android:id="@+id/radioButton1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="RadioButton" /> 

</LinearLayout> 

expandablelist_child_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="55dip" 
    android:background="@color/ExpandChildBackground" 
    android:orientation="vertical" > 


    <TextView 
     android:id="@+id/tvChild" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textColor="@color/Black" 
     android:textSize="17sp" > 
    </TextView> 
    <Spinner 
     android:id="@+id/spinner1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/b1" /> 
</LinearLayout> 

下面你可以看到在第一和第二個孩子的運行。

+0

類似的問題我正面臨着......在這裏運氣不佳? – CoDe 2016-04-13 08:33:40

回答

0
int result = 0; 
if (childPosition == getChildrenCount(groupPosition)-1)//logical fail ? 
result = 1; 

嘗試返回 「child_pos」

getChildrenCount將要給你everey時間相同的值。你有2個孩子-1 = 1

btw。僅在視圖是空是錯誤的,應該做的視圖是否爲空/不爲空即不論情況下檢查這個初始化

ArrayList<ExpandListChild> chList = groups.get(groupPosition).getItems(); 
-1

您執行下面的代碼片段。

if(itemType == 0) 
{ 

view = infalInflater.inflate(R.layout.expandlist_child_item, null); 
textView = (TextView) view.findViewById(R.id.tvChild); 
textView.setText("0"); 
//textView.setTag(child.getTag()); 
} 
else 
{ view = infalInflater.inflate(R.layout.child2, null); 
textView = (TextView) view.findViewById(R.id.tvChild1); 
textView.setText("1"); 
} 
+0

那麼你每次都在充氣,你的表現會很糟糕 – 2014-12-12 15:13:04

相關問題