一、上图

二、图片功能解说
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.
}
本文详细介绍了如何在ListView中实现按钮点击事件,包括按钮点击后的业务功能处理和ListView项的展开与隐藏机制。通过适配器处理,实现了按钮点击事件的监听与响应,以及ListView项布局的动态显示与隐藏。
3348

被折叠的 条评论
为什么被折叠?



