I am trying to create a treeview using expandable list view. I am able
to achieve most of the functionality; the main problem is that while
expanding and collapsing the list I want to dynamically resize the
childview(at the moment I am specifying fixed value for height of the
view). I want a single vertical scrollbar and a horizontal scrollbar
for the whole view.
Any links or pointers to existing implementations is appreciated.
Thanks.
Please find below the code:
public class ExpandListTest extends ExpandableListActivity {
ExpandableListAdapter mAdapter,mAdapter2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set up our adapter
mAdapter = new MyExpandableListAdapter();
setListAdapter(mAdapter);
registerForContextMenu(getExpandableListView());
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Sample menu");
menu.add(0, 0, 0, R.string.expandable_list_sample_action);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
ExpandableListContextMenuInfo info =
(ExpandableListContextMenuInfo) item.getMenuInfo();
String title = ((TextView) info.targetView).getText().toString
();
int type = ExpandableListView.getPackedPositionType
(info.packedPosition);
if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
int groupPos = ExpandableListView.getPackedPositionGroup
(info.packedPosition);
int childPos = ExpandableListView.getPackedPositionChild
(info.packedPosition);
Toast.makeText(this, title + ": Child " + childPos + "
clicked in group " + groupPos,
Toast.LENGTH_SHORT).show();
return true;
} else if (type ==
ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
int groupPos = ExpandableListView.getPackedPositionGroup
(info.packedPosition);
Toast.makeText(this, title + ": Group " + groupPos + "
clicked", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
/**
* A simple adapter which maintains an ArrayList of photo resource
Ids.
* Each photo is displayed as an image. This adapter supports
clearing the
* list of photos and adding a new photo.
*
*/
public class MyExpandableListAdapter extends
BaseExpandableListAdapter {
// Sample data set. children[i] contains the children (String
[]) for groups[i].
private String[] groups = { "People Names", "Dog Names", "Cat
Names", "Fish Names" };
private String[][] children = {
{ "Arnold", "Barry", "Chuck", "David" },
{ "Ace", "Bandit", "Cha-Cha", "Deuce" },
{ "Fluffy", "Snuggles" },
{ "Goldy", "Bubbles" }
};
public Object getChild(int groupPosition, int childPosition) {
return children[groupPosition][childPosition];
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public int getChildrenCount(int groupPosition) {
return 1;
}
public TextView getGenericView() {
// Layout parameters for the ExpandableListView
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
TextView textView = new TextView(ExpandListTest.this);
textView.setLayoutParams(lp);
// Center the text vertically
textView.setGravity(Gravity.CENTER_VERTICAL |
Gravity.LEFT);
// Set the text starting position
textView.setPadding(36, 0, 0, 0);
return textView;
}
public ExpandableListView getGenericView1(int groupPosition) {
// Layout parameters for the ExpandableListView
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, 1000);
ExpandableListView textView = new ExpandableListView
(ExpandListTest.this);
textView.setLayoutParams(lp);
// Center the text vertically
// textView.setGravity(Gravity.CENTER_VERTICAL |
Gravity.LEFT);
// Set the text starting position
textView.setPadding(30, 0, 0, 0);
return textView;
}
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild,
View convertView, ViewGroup parent) {
ExpandableListView textView = getGenericView1(groupPosition);
mAdapter2 = new MyExpandableListAdapterNext();
textView.setAdapter(mAdapter2);
registerForContextMenu(getExpandableListView());
return textView;
}
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}
public int getGroupCount() {
return groups.length;
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean
isExpanded, View convertView,
ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(getGroup(groupPosition).toString());
return textView;
}
public boolean isChildSelectable(int groupPosition, int
childPosition) {
return true;
}
public boolean hasStableIds() {
return true;
}
}
public class MyExpandableListAdapterNext extends
BaseExpandableListAdapter {
// Sample data set. children[i] contains the children (String
[]) for groups[i].
private String[] groups1 = { "People Names", "Dog Names", "Cat
Names", "Fish Names" };
private String[][] children = {
{ "Arnold", "Barry", "Chuck", "David" },
{ "Ace", "Bandit", "Cha-Cha", "Deuce" },
{ "Fluffy", "Snuggles" },
{ "Goldy", "Bubbles" }
};
public Object getChild(int groupPosition, int childPosition) {
return children[groupPosition][childPosition];
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public int getChildrenCount(int groupPosition) {
return 1;
}
public TextView getGenericView(int groupPosition) {
// Layout parameters for the ExpandableListView
AbsListView.LayoutParams lp = new AbsListView.LayoutParams
(
ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
TextView textView = new TextView(ExpandListTest.this);
textView.setLayoutParams(lp);
// Center the text vertically
// textView.setGravity(Gravity.CENTER_VERTICAL |
Gravity.LEFT);
// Set the text starting position
textView.setPadding(36, 0, 0, 0);
return textView;
}
public ExpandableListView getGenericView1(int groupPosition) {
// Layout parameters for the ExpandableListView
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, 500);
ExpandableListView textView = new ExpandableListView
(ExpandListTest.this);
textView.setLayoutParams(lp);
// Center the text vertically
// textView.setGravity(Gravity.CENTER_VERTICAL |
Gravity.LEFT);
// Set the text starting position
textView.setPadding(30, 0, 0, 0);
return textView;
}
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild,
View convertView, ViewGroup parent) {
ExpandableListView textView = getGenericView1(groupPosition);
mAdapter2 = new MyExpandableListAdapterNext();
textView.setAdapter(mAdapter2);
registerForContextMenu(getExpandableListView());
return textView;
}
public Object getGroup(int groupPosition) {
return groups1[groupPosition];
}
public int getGroupCount() {
return groups1.length;
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean
isExpanded, View convertView,
ViewGroup parent) {
TextView textView = getGenericView(groupPosition);
textView.setText(getGroup(groupPosition).toString());
return textView;
}
public boolean isChildSelectable(int groupPosition, int
childPosition) {
return true;
}
public boolean hasStableIds() {
return true;
}
}
}
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en