一.listView的二级目录且选中实现:
记录下来,以便以后可能会用到,直接上贴源码:
先上效果图:
主界面:
public class MainActivity extends Activity {
// 树形Listview显示类别
private ExpandableListView listview1;
// 一级
private List<String> groups;
// 二级
private List<List<String>> child;
// 适配器
private ListViewAdapter mAdapter;
//记录点击的节点位置,初始为-1
public static int children_item = -1;
public static int parent_item = -1;
//记录上一次点击的item
private View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview1 = (ExpandableListView) findViewById(R.id.listview1);
mAdapter = new ListViewAdapter(this, ListViewAdapter.PaddingLeft >> 1);
groups = getListData();
//一级目录
child = new ArrayList<List<String>>();
List<ListViewAdapter.TreeNode> treeNode = mAdapter.GetTreeNode();
//为每一个一级目录下添加内容
for (int i = 0; i < groups.size(); i++) {
ListViewAdapter.TreeNode node = new ListViewAdapter.TreeNode();
node.parent = groups.get(i);
child.add(i,getListData());
for (int ii = 0; ii < child.get(i).size(); ii++) {
node.childs.add(child.get(i).get(ii));
}
treeNode.add(node);
}
mAdapter.UpdateTreeNode(treeNode);
listview1.setAdapter(mAdapter);
listview1.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView arg0,
View arg1, int parent, int children, long arg4) {
//当前item变色
arg1.setBackgroundResource(R.color.color1);
//上一个item还原
if (parent_item != -1
&& children_item != -1
&& (children_item != children || parent_item != parent)) {
view.setBackgroundResource(R.drawable.listview_item_bg);
}
view = arg1;
children_item = children;
parent_item = parent;
return false;
}
});
}
public List<String> getListData() {
List<String> list = new ArrayList<String>();
list.add("语文");
list.add("数学");
list.add("英语");
list.add("历史");
list.add("毛概");
list.add("自然");
return list;
}
}适配器:
public class ListViewAdapter extends BaseExpandableListAdapter {
public static final int ItemHeight = 72;// 每项的高度
public static final int PaddingLeft = 48;// 每项的高度
private int myPaddingLeft = 0;
static public class TreeNode {
public String parent;
public List<String> childs = new ArrayList<String>();
}
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
Context parentContext;
public ListViewAdapter(Context view, int myPaddingLeft) {
parentContext = view;
this.myPaddingLeft = myPaddingLeft;
}
public List<TreeNode> GetTreeNode() {
return treeNodes;
}
public void UpdateTreeNode(List<TreeNode> nodes) {
treeNodes = nodes;
}
public void RemoveAll() {
treeNodes.clear();
}
public Object getChild(int groupPosition, int childPosition) {
return treeNodes.get(groupPosition).childs.get(childPosition)
.toString();
}
public int getChildrenCount(int groupPosition) {
return treeNodes.get(groupPosition).childs.size();
}
static public TextView getTextView(Context context) {
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, ItemHeight);
TextView textView = new TextView(context);
textView.setLayoutParams(lp);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
textView.setTextSize(15);
return textView;
}
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView textView = getTextView(this.parentContext);
textView.setText(getChild(groupPosition, childPosition).toString());
textView.setPadding(myPaddingLeft + PaddingLeft, 0, 0, 0);
textView.setTextSize(15);
return textView;
}
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
//不会选中丢失
if (MainActivity.children_item != -1) {
if (MainActivity.children_item == groupPosition) {
convertView
.setBackgroundResource(R.color.color1);
} else {
convertView
.setBackgroundResource(R.drawable.listview_item_bg);
}
}
TextView textView = getTextView(this.parentContext);
textView.setText(getGroup(groupPosition).toString());
textView.setPadding(myPaddingLeft + (PaddingLeft >> 1), 0, 0, 0);
return textView;
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public Object getGroup(int groupPosition) {
return treeNodes.get(groupPosition).parent.toString();
}
public int getGroupCount() {
return treeNodes.size();
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public boolean hasStableIds() {
return true;
}
}<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/background_light"
android:orientation="vertical" >
<ExpandableListView
android:id="@+id/listview1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:choiceMode="singleChoice" />
</LinearLayout><?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/background_dark" android:state_selected="true"></item>
<item android:drawable="@android:color/background_dark" android:state_pressed="true"></item>
<item android:drawable="@android:color/background_dark" android:state_focused="true"></item>
<item android:drawable="@android:color/transparent"></item>
</selector><?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="color1">@android:color/background_dark</color>
</resources>原文:http://blog.csdn.net/u010708662/article/details/45846945