现在的位置: 首页 > 综合 > 正文

自定义ExpandableListView,实现APP帮助界面

2017年11月17日 ⁄ 综合 ⁄ 共 3543字 ⁄ 字号 评论关闭

最近公司新做的一个项目,里边带有帮助界面,即点击一条问题后,自动在下面展开答案,很多人第一想法就是在下面写个TextView且设置android:visibility="gone",当点击时就在代码中将其设为可见...但是,这样耗得时间,足以做很多事了,为何不找下更好的解决方法呢..以下代码参考:http://blog.csdn.net/zoeice/article/details/7729982


项目要实现的界面如下:



而我们自定义的ExpandableListView代码为:

public class HelpCenterView extends ExpandableListView{

	private Context mContext;
	private List<String> mGroups;
	private List<String> mChilds;
	
	private HelpCenterAdapter mAdapter;
	
	
	public HelpCenterView(Context context) {
		super(context);
		
		mContext = context;
		mGroups = getGroupData();
		mChilds = getChildData();
		
		// 隐藏滚动条
		this.setVerticalScrollBarEnabled(false);
		// 隐藏左边默认箭头
		this.setGroupIndicator(null);
		
		setCacheColorHint(Color.TRANSPARENT);
		setDividerHeight(0);
		setChildrenDrawnWithCacheEnabled(false);
		setGroupIndicator(null);
		
		// 隐藏选择的黄色高亮
		ColorDrawable drawable_tranparent_ = new ColorDrawable(Color.TRANSPARENT);
		setSelector(drawable_tranparent_);
		
		mAdapter = new HelpCenterAdapter();
		setAdapter(mAdapter);
	}
	
	public HelpCenterView(Context context, AttributeSet attrs) {
		this(context);
	}
	
	
	/**
	 * 获得Group数据
	 * @return
	 */
	private List<String> getGroupData() {
		String[] groups = mContext.getResources().getStringArray(R.array.help_center_group);
		List<String> list = new ArrayList<String>();
		for(int i=0; i<groups.length; i++) {
			list.add(groups[i]);
		}
		return list;
	}
	
	/**
	 * 获得Child数据
	 * @return
	 */
	private List<String> getChildData() {
		String[] childs = mContext.getResources().getStringArray(R.array.help_center_child);
		List<String> list = new ArrayList<String>();
		for(int i=0; i<childs.length; i++) {
			list.add(childs[i]);
		}
		return list;
	}
	
	
	public class HelpCenterAdapter extends BaseExpandableListAdapter {

		@Override
		public int getGroupCount() {
			return mGroups.size();
		}

		@Override
		public int getChildrenCount(int groupPosition) {
			//Child下只显示一条
			return 1;
		}

		@Override
		public Object getGroup(int groupPosition) {
			return mGroups.get(groupPosition);
		}

		@Override
		public Object getChild(int groupPosition, int childPosition) {
			return mChilds.get(groupPosition);
		}

		@Override
		public long getGroupId(int groupPosition) {
			return groupPosition;
		}

		@Override
		public long getChildId(int groupPosition, int childPosition) {
			return childPosition;
		}

		@Override
		public boolean hasStableIds() {
			return false;
		}

		@Override
		public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
			if(convertView == null) {
				convertView = LayoutInflater.from(mContext).inflate(R.layout.item_help_center_group, null);
			}
			
			TextView groupText = (TextView)convertView.findViewById(R.id.id_tv_item_help_center_group);
			ImageView groupImg = (ImageView)convertView.findViewById(R.id.id_iv_item_help_center_group);
			
			//Group展开时
			if(isExpanded) {
				groupText.setTextColor(ColorStateList.valueOf(Color.parseColor("#ff5e4c")));
				groupImg.setImageResource(R.drawable.icon_more_down);
			//Group未展开时
			} else {
				groupText.setTextColor(ColorStateList.valueOf(Color.parseColor("#555555")));
				groupImg.setImageResource(R.drawable.icon_main_more);
			}
			//设置Group内容
			groupText.setText(mGroups.get(groupPosition));
			return convertView;
		}

		@Override
		public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
			if(convertView == null) {
				convertView = LayoutInflater.from(mContext).inflate(R.layout.item_help_center_child, null);
			}
			TextView childText = (TextView)convertView.findViewById(R.id.id_tv_item_help_center_child);
			childText.setText(mChilds.get(groupPosition));
			return convertView;
		}

		@Override
		public boolean isChildSelectable(int groupPosition, int childPosition) {
			return true;
		}
	}
}

在布局文件中只需要:

<com.example.test.HelpCenterView 
    android:id="@+id/id_elv_help_center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:dividerHeight="0.5dp"
    android:listSelector="#00000000"
    android:divider="@color/line" />

很简单..自定义的ExpandableListView只是把适配器集成在里边而已

抱歉!评论已关闭.