您的位置:首页 > 移动开发 > Android开发

Android_ExpandableListView_子item响应点击事件

2013-12-16 22:14 423 查看
本博文为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/17362189

1.满足条件

如果使用ExpandableListView,需要子item响应一个事件,比如重新启动一个新的activity,需要满足下面的条件:

(1).修改Adapter返回值

覆写BaseExpandableListAdapter的isChildSelectable()的返回值为true;

(2).绑定监听器

调用ExpandableListView对象的setOnChildClickListener()方法,为其绑定监听器

2.示意图


         


3.代码实现

public class MovieAdapter extends BaseExpandableListAdapter {
private List<IncomingBean> list;
private LayoutInflater inflater;

public MovieAdapter(Context context) {
inflater = LayoutInflater.from(context);
list = new ArrayList<IncomingBean>();
}

public void addList(List<IncomingBean> list) {
this.list.addAll(list);
}
public List<IncomingBean> getList() {
return list;
}
private class ViewHolder {

TextView tvDay;
TextView tvMonth;
View vLine;
ImageView ivPic;
TextView tvTitle;
TextView tvType;
TextView tvDirector;
/** 预告片 */
Button btForenotice;
/** 提醒 */

public ViewHolder(View view) {
tvDay = (TextView) view.findViewById(R.id.tv_incoming_day);
vLine = view.findViewById(R.id.left_green_line);
tvMonth = (TextView) view.findViewById(R.id.tv_month);
ivPic = (ImageView) view.findViewById(R.id.iv_incoming_movie);
tvTitle = (TextView) view.findViewById(R.id.tv_incoming_title);
tvType = (TextView) view.findViewById(R.id.tv_incoming_movieType);
tvDirector = (TextView) view.findViewById(R.id.tv_incoming_director);
btForenotice = (Button) view.findViewById(R.id.bt_incoming_forenotice);
}
}

private class ChildViewHolder {

ImageView ivPic;
TextView tvTitle;

public ChildViewHolder(View view) {
ivPic = (ImageView) view.findViewById(R.id.pic);
tvTitle = (TextView) view.findViewById(R.id.title);
}
}

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

@Override
public int getChildrenCount(int groupPosition) {
return list.get(groupPosition).videos.size();
}

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

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

@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 = inflater.inflate(R.layout.item_incoming_movies, null);
ViewHolder holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
ViewHolder holder = (ViewHolder) convertView.getTag();

IncomingBean bean = list.get(groupPosition);
if (bean.isDay) {
holder.tvDay.setText(bean.day);
holder.tvDay.setVisibility(View.VISIBLE);
} else {
holder.tvDay.setVisibility(View.GONE);
}
if (bean.isMonth) {
holder.tvMonth.setText(bean.month + "月");
holder.tvMonth.setVisibility(View.VISIBLE);
holder.vLine.setVisibility(View.VISIBLE);
} else {
holder.tvMonth.setVisibility(View.GONE);
holder.vLine.setVisibility(View.GONE);
}
holder.tvTitle.setText(bean.title);

StringBuilder sb = new StringBuilder();
if (bean.wantedCount > 0) {
sb.append(bean.wantedCount).append("人想看-");
}
sb.append(bean.type);
holder.tvType.setText(sb.toString());
holder.tvDirector.setText("导演:" + bean.director);
holder.btForenotice.setEnabled(bean.isVideo);

holder.ivPic.setTag(bean.image);// 防止错位
MyVolley.getImageLoader().get(bean.image,
ImageLoader.getImageListener(holder.ivPic, R.drawable.defaultposter_local, 0));

return convertView;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_movies_child, null);
ChildViewHolder holder = new ChildViewHolder(convertView);
convertView.setTag(holder);
}
ChildViewHolder holder = (ChildViewHolder) convertView.getTag();

VideoBean bean = list.get(groupPosition).videos.get(childPosition);
holder.tvTitle.setText(bean.title);

holder.ivPic.setTag(bean.image);// 防止错位
MyVolley.getImageLoader().get(bean.image,
ImageLoader.getImageListener(holder.ivPic, R.drawable.defaultposter_local, 0));
return convertView;
}

/**ExpandableListView 如果子条目需要响应click事件,必需返回true*/
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}

}
listView.setOnChildClickListener(new OnChildClickListener() {

@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Intent intent = new Intent(getActivity(), PlayActivity.class);
intent.setData(Uri.parse(adapter.getList().get(groupPosition).videos.get(childPosition).url));
startActivity(intent);
return true;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: