效果将会这样,点击父视图不能展开
怎么办呢?后来发现ExpandableListView有个expandGroup方法,那就可以通过其他事件来调用expandGroup以展开或收缩,ok,知道了原理,下面看代码
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ExpandableListView
android:id="@+id/expandableListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:groupIndicator="@null" >
</ExpandableListView>
</RelativeLayout>
MainActivity.java
public class MainActivity extends Activity
{
private ExpandableListView expandableListView;
private String[] group_tv = { "未执行", "已执行" };
private String[] spinner = { "08:30-09:30", "09:30-09:30", "09:30-10:30" };
private String[][] child_tv = { { "测试数据", "测试数据", "测试数据", "测试数据" }, { "测试数据", "测试数据", "测试数据", "测试数据" } };
private ArrayAdapter adapter = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
adapter = new ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, spinner);
expandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
expandableListView.setAdapter(new ExpandableListAdapter());
}
class ExpandableListAdapter extends BaseExpandableListAdapter
{
@Override
public int getGroupCount()
{
return group_tv.length;
}
@Override
public int getChildrenCount(int groupPosition)
{
return child_tv[groupPosition].length;
}
@Override
public String getGroup(int groupPosition)
{
return group_tv[groupPosition];
}
@Override
public String getChild(int groupPosition, int childPosition)
{
return child_tv[groupPosition][childPosition];
}
@Override
public long getGroupId(int groupPosition)
{
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition)
{
return childPosition;
}
@Override
public boolean hasStableIds()
{
return true;
}
@Override
public View getGroupView(final int groupPosition, final boolean isExpanded, View convertView, ViewGroup parent)
{
GroupHolder groupHolder = null;
if (convertView == null)
{
groupHolder = new GroupHolder();
convertView = MainActivity.this.getLayoutInflater().from(MainActivity.this).inflate(R.layout.group, null);
groupHolder.groupTv = (TextView) convertView.findViewById(R.id.groupTv);
groupHolder.groupSpinner = (Spinner) convertView.findViewById(R.id.groupSpinner);
convertView.setTag(groupHolder);
} else
{
groupHolder = (GroupHolder) convertView.getTag();
}
((ImageView) convertView.findViewById(R.id.pro_logo)).setImageResource(isExpanded ? R.drawable.hosp_pro_open : R.drawable.hosp_pro_close);
groupHolder.groupTv.setText(group_tv[groupPosition]);
groupHolder.groupSpinner.setAdapter(adapter);
LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.groupExpand);
layout.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (isExpanded)
{
expandableListView.collapseGroup(groupPosition);
} else
{
expandableListView.expandGroup(groupPosition);
}
}
});
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
{
ChildHolder childHolder = null;
if (convertView == null)
{
childHolder = new ChildHolder();
convertView = MainActivity.this.getLayoutInflater().from(MainActivity.this).inflate(R.layout.child, null);
childHolder.childTv = (TextView) convertView.findViewById(R.id.childTv);
childHolder.childSpinner = (Spinner) convertView.findViewById(R.id.childSpinner);
convertView.setTag(childHolder);
} else
{
childHolder = (ChildHolder) convertView.getTag();
}
childHolder.childTv.setText(child_tv[groupPosition][childPosition]);
childHolder.childSpinner.setAdapter(adapter);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition)
{
return true;
}
class GroupHolder
{
TextView groupTv;
Spinner groupSpinner;
}
class ChildHolder
{
TextView childTv;
Spinner childSpinner;
}
}
}
group.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="50.0dp"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/groupExpand"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="3"
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageView
android:id="@+id/pro_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/hosp_pro_close" />
<TextView
android:id="@+id/groupTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="未执行" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical|right"
android:paddingRight="5.0dp" >
<Spinner
android:id="@+id/groupSpinner"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
child.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="30.0dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<TextView
android:id="@+id/childTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="测试数据" />
<Spinner
android:id="@+id/childSpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right" />
</LinearLayout>
OK,下面来看看效果
我的博客其它文章列表
http://my.oschina.net/helu