ListView的Item中带按钮以及按钮布局的显示与隐藏

本文详细介绍了如何在ListView中实现按钮点击事件,包括按钮点击后的业务功能处理和ListView项的展开与隐藏机制。通过适配器处理,实现了按钮点击事件的监听与响应,以及ListView项布局的动态显示与隐藏。

一、上图

\

二、图片功能解说

1、点击ListView中其中的一项,Item中处于隐藏状态的操作按钮部分布局显示,其他项显示的布局同时被隐藏,再次点击该项,操作按钮部分布局再次隐藏。

2、点击各个按钮,分别弹出哪个按钮被点击(也就是点击每一个按钮分别处理不同按钮的业务功能)。

三、实现代码主要处于适配器的处理。见如下代码:

 

001. package com.test.listviewbtn.adapters;
002.  
003. import java.util.ArrayList;
004.  
005. import android.content.Context;
006. import android.view.LayoutInflater;
007. import android.view.View;
008. import android.view.View.OnClickListener;
009. import android.view.ViewGroup;
010. import android.widget.BaseAdapter;
011. import android.widget.Button;
012. import android.widget.ImageView;
013. import android.widget.LinearLayout;
014. import android.widget.TextView;
015. import android.widget.Toast;
016.  
017. import com.test.listviewbtn.R;
018. import com.test.listviewbtn.beans.LvItemBean;
019.  
020. public class LvAdapter extends BaseAdapter {
021.  
022. private ArrayList<LvItemBean> lvItemBeanList;
023. // 布局加载器
024. private LayoutInflater mInflater;
025. // 上下文
026. private Context context;
027. // 布局缓存对象
028. private ViewHolder holder;
029. //记录当前展开项的索引
030. private int expandPosition = -1;
031.  
032. public LvAdapter(ArrayList<LvItemBean> lvItemBeanList, Context context) {
033. super();
034. this.lvItemBeanList = lvItemBeanList;
035. this.context = context;
036. mInflater = LayoutInflater.from(context);
037. }
038.  
039. @Override
040. public int getCount() {
041. return null == lvItemBeanList ? 0 : lvItemBeanList.size();
042. }
043.  
044. @Override
045. public Object getItem(int position) {
046. return lvItemBeanList.get(position);
047. }
048.  
049. @Override
050. public long getItemId(int position) {
051. return position;
052. }
053.  
054. @Override
055. public View getView(int position, View convertView, ViewGroup parent) {
056. if (null == convertView) {
057. convertView = mInflater.inflate(R.layout.activity_main_listview_item, null);
058. holder = new ViewHolder();
059. holder.tv1 = (TextView) convertView.findViewById(R.id.tv_1);
060. holder.tv2 = (TextView) convertView.findViewById(R.id.tv_2);
061. holder.tv3 = (TextView) convertView.findViewById(R.id.tv_3);
062. holder.llItemTop = (LinearLayout) convertView.findViewById(R.id.ll_item_top);
063. holder.llItemBottom = (LinearLayout) convertView.findViewById(R.id.ll_item_bottom);
064. holder.bt1 = (Button) convertView.findViewById(R.id.bt_1);
065. holder.bt2 = (Button) convertView.findViewById(R.id.bt_2);
066. holder.bt3 = (Button) convertView.findViewById(R.id.bt_3);
067. convertView.setTag(holder);
068. else {
069. holder = (ViewHolder) convertView.getTag();
070. }
071.  
072. LvItemBean lvItemBean = lvItemBeanList.get(position);
073. if (null != lvItemBean) {
074. holder.llItemTop.setOnClickListener(new OnLvItemClickListener(position));
075. holder.bt1.setOnClickListener(new OnBtnClickListener());
076. holder.bt2.setOnClickListener(new OnBtnClickListener());
077. holder.bt3.setOnClickListener(new OnBtnClickListener());
078. //如果点击的是当前项,则将其展开,否则将其隐藏
079. if(expandPosition == position){
080. holder.llItemBottom.setVisibility(View.VISIBLE);
081. }else{
082. holder.llItemBottom.setVisibility(View.GONE);
083. }
084. }
085.  
086. return convertView;
087. }
088.  
089. class OnLvItemClickListener implements OnClickListener {
090. private int position;
091.  
092. public OnLvItemClickListener(int position) {
093. super();
094. this.position = position;
095. }
096.  
097. @Override
098. public void onClick(View v) {
099. //如果当前项为展开,则将其置为-1,目的是为了让其隐藏,如果当前项为隐藏,则将当前位置设置给全局变量,让其展开,这也就是借助于中间变量实现布局的展开与隐藏
100. if(expandPosition == position){
101. expandPosition = -1;
102. }else{
103. expandPosition = position;
104. }
105. notifyDataSetChanged();
106. }
107.  
108. }
109.  
110. class OnBtnClickListener implements OnClickListener{
111.  
112. @Override
113. public void onClick(View v) {
114. switch(v.getId()){
115. case R.id.bt_1:
116. Toast.makeText(context, "新增按钮被点击"1).show();
117. break;
118. case R.id.bt_2:
119. Toast.makeText(context, "修改按钮被点击"1).show();
120. break;
121. case R.id.bt_3:
122. Toast.makeText(context, "删除按钮被点击"1).show();
123. break;
124. }
125. }
126.  
127. }
128.  
129. class ViewHolder {
130. TextView tv1;
131. TextView tv2;
132. TextView tv3;
133. LinearLayout llItemTop;
134. LinearLayout llItemBottom;
135. Button bt1;
136. Button bt2;
137. Button bt3;
138. ImageView ivUpDownArrow;
139. }
140.  
141. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值