急求!关于ExpandableListView三层显示的问题

win-sun 2014-07-08 04:32:12
我的实现思路是在一个ExpandableListView里面的子项里在嵌套一个ExpandableListView(这样就是三层了),但现在的问题是我点击第二层时,先变化高度,再点击才展示第三层列表。也就是说我的第三层列表要多次点击才会出现。(有时要点击多于两次,很纳闷)。
下面是主要代码:
第一个ExpandableListView加载:

/**
* 评分细则列表
*/
scoreList = (ExpandableListView) findViewById(R.id.scorelist);
//父级菜单
List<String> groupArray = new ArrayList<String>();
groupArray.add(" 评分细则");
final List<List<String>> childArray = new ArrayList<List<String>>();
List<String> child = new ArrayList<String>();
child.add("序号");
child.add("日期");
child.add("工程类型");
child.add("基础施工部分");
child.add("电气施工部分");
child.add("施工班组");
child.add("备注");
childArray.add(child);
ExpandableAdapter adapter = new ExpandableAdapter(this, groupArray, childArray);
scoreList.setAdapter(adapter);

//组展开后重新设置高度
scoreList.setOnGroupClickListener(new OnGroupClickListener() {

@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
oneSize = scoreList.getChildAt(groupPosition).getHeight();
ViewGroup.LayoutParams params = scoreList.getLayoutParams();
allHeight =(childArray.get(groupPosition).size()+1)*oneSize;
params.height =allHeight;
scoreList.setLayoutParams(params);
return false;
}

});
//组收缩调用的监听事件
scoreList.setOnGroupCollapseListener(new OnGroupCollapseListener() {

@Override
public void onGroupCollapse(int groupPosition) {
ViewGroup.LayoutParams params = scoreList.getLayoutParams();
params.height = 60;
scoreList.setLayoutParams(params);
}
});
...全文
205 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
win-sun 2014-07-11
  • 打赏
  • 举报
回复
不是我想要的答案,既然就你一个回答,分就给你吧
哎,真难 2014-07-09
  • 打赏
  • 举报
回复
好吧,请猛戳这里
win-sun 2014-07-09
  • 打赏
  • 举报
回复
顶起。。。。。。
win-sun 2014-07-08
  • 打赏
  • 举报
回复
引用 2 楼 heaimnmn 的回复:
还可以这样么,你不如自定义一个ExpandableListView
自定义的大概怎么写,我没思路!
哎,真难 2014-07-08
  • 打赏
  • 举报
回复
还可以这样么,你不如自定义一个ExpandableListView
win-sun 2014-07-08
  • 打赏
  • 举报
回复
第二个ExpandableListView加载是在自定义的ExpandableAdapter方法里:

	/**************************************** 以下为自定义方法 *********************************************/
	/**
	 * Children 's View
	 * 
	 * @param string
	 * @return
	 */
	public View getGenericView(String string) {
		final View view ;
		if("基础施工部分".equals(string)||"电气施工部分".equals(string)){
			List<String> child = null;
			AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(
					ViewGroup.LayoutParams.FILL_PARENT, 64);
			view = new ExpandableListView(activity);
			// 次级父集合
			nextGroupArray = new ArrayList<String>();
			if ("基础施工部分".equals(string)) {
				nextGroupArray.add("    基础施工部分");
			} else if ("电气施工部分".equals(string)) {
				nextGroupArray.add("    电气施工部分");
			}
			// 次级子集合
			nextChildArray = new ArrayList<List<String>>();
			child = new ArrayList<String>();
			child.add("   安全评分");
			child.add("   质量评分");
			child.add("   文明施工评分");
			child.add("   物资返料评分");
			child.add("   经济处罚");
			nextChildArray.add(child);
			ExpandableAdapter adapter = new ExpandableAdapter(activity, nextGroupArray, nextChildArray);
			((ExpandableListView) view).setAdapter(adapter);
			
	
			//组展开后重新设置高度
			((ExpandableListView) view).setOnGroupClickListener(new OnGroupClickListener() {

				@Override
				public boolean onGroupClick(ExpandableListView parent, View v,
						int groupPosition, long id) {
					ConstructionWorkScore.resetjcHight();
					int oneSize = ((ViewGroup) view).getChildAt(groupPosition).getHeight();
					ViewGroup.LayoutParams params = view.getLayoutParams();
					int allHeight =(nextChildArray.get(groupPosition).size()+1)*oneSize;
					params.height =allHeight;
					view.setLayoutParams(params);
					v.setTag(view);
					return false;
				}
				
			});
			//组收缩调用的监听事件
			((ExpandableListView) view).setOnGroupCollapseListener(new OnGroupCollapseListener() {
				
				@Override
				public void onGroupCollapse(int groupPosition) {
					ConstructionWorkScore.closeHight();
				}
			});

		}else {
			AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(
					ViewGroup.LayoutParams.FILL_PARENT, 64);
			view = new TextView(activity);
			view.setLayoutParams(layoutParams);
			// Center the text vertically
			((TextView) view).setGravity(Gravity.CENTER_VERTICAL);
			// Set the text starting position
			view.setPadding(36, 0, 0, 0);
			((TextView) view).setText(string);
		}
		return view;
	}
	
	
重新设置整个列表的方法(在第一个ExpandableListView的类中):
	/**
	 * 打开基础评分
	 */
	public static void resetjcHight() {
		if(openTimes>3){
			openTimes=3;
		}
		ViewGroup.LayoutParams params = scoreList.getLayoutParams();
		int avg = allHeight + oneSize *3*openTimes+50;
		params.height = avg;
		scoreList.setLayoutParams(params);
		openTimes=openTimes+1;
	}
	
	/**
	 * 关闭基础评分
	 */
	public static void closeHight() {
		ViewGroup.LayoutParams params = scoreList.getLayoutParams();
		int avg = allHeight;
		params.height = avg;
		scoreList.setLayoutParams(params);
		openTimes=openTimes-1;
	}
	

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧