我是新來的Android和我努力做到以下使用ExpandableListView
。如何使動態ExpandableListView
我想有3組 - 「在線」,「離線」和「離開」。這些組將包含將從互聯網加載的兒童自定義對象(聯繫人)。這些對象一次只能在一個組中(儘管稍後可能會更改)。
我自己嘗試過這個,沒有尋求幫助,我會粘貼代碼 - 它讓我用正確的組顯示列表視圖,但孩子們在所有組中。
在代碼中,聯繫人項目目前只是在另一個類的向量。
我真的很感謝一些幫助,因爲我真的被卡住了。
public class MyTreeAdaptor extends BaseExpandableListAdapter{
@Override
public boolean areAllItemsEnabled()
{
return true;
}
private Context context;
private ArrayList<String> groups;
private ArrayList<ArrayList<Contact>> children;
public MyTreeAdaptor(Context context, ArrayList<String> groups,
ArrayList<ArrayList<Contact>> children) {
this.context = context;
this.groups = groups;
this.children = children;
}
/**
* A general add method, that allows you to add a Contact to this list
*
* Depending on if the category opf the Contact is present or not,
* the corresponding item will either be added to an existing group if it
* exists, else the group will be created and then the item will be added
* @param Contact
*/
public void addItem(Contact aContact) {
try {
Log.e("additem", ""+aContact.show);
if (!groups.contains(aContact.show)) {
groups.add(aContact.show);
}
int index = groups.indexOf(aContact.show);
if (children.size() < index + 1) {
children.add(new ArrayList<Contact>());
}
children.get(index).add(aContact);
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("additem error", " "+e);
}
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return children.get(groupPosition).get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
// Return a child view. You can load your custom layout here.
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
try {
Contact contact = (Contact) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.treeview, null);
}
TextView tv = (TextView) convertView.findViewById(R.id.text1);
try {
tv.setText(" " + contact.name);
tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Depending upon the child type, set the imageTextView01
/*if (Contact instanceof Car) {
tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.car, 0, 0, 0);
} else if (Contact instanceof Bus) {
tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.bus, 0, 0, 0);
} else if (Contact instanceof Bike) {
tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.bike, 0, 0, 0);
}*/
return convertView;
} catch (Exception e) {
Log.e("error thr", " "+e);
e.printStackTrace();
return null;
}
}
@Override
public int getChildrenCount(int groupPosition) {
try
{
return children.get(groupPosition).size();
}
catch(Exception hh)
{
return 0;
}
}
@Override
public Object getGroup(int groupPosition) {
return groups.get(groupPosition);
}
@Override
public int getGroupCount() {
return groups.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
// Return a group view. You can load your custom layout here.
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
try {
Log.e(groupPosition+"groups size is", " "+groups.size());
String group;
if(groups.size() > 0)
{
group = (String) getGroup(groupPosition);
}
else
{
group = "null";//(String) getGroup(groupPosition);
}
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.treeview, null);
}
TextView tv = (TextView) convertView.findViewById(R.id.text1);
try {
tv.setText(group);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return convertView;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int arg0, int arg1) {
return true;
}
}
孩子的意見結構相同或不同? – Jeshurun
同樣我想 - 我只有2個佈局文件treeitem.xml包含一個linerlayout和treeview.xml,它也有一個linearlayout,但也包含一個imageview。原諒我,如果我實施了這個錯誤 - 只是一個新手。 –