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

一、上图

二、图片功能解说

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

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

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

package com.test.listviewbtn.adapters;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.test.listviewbtn.R;
import com.test.listviewbtn.beans.LvItemBean;

public class LvAdapter extends BaseAdapter {

	private ArrayList<LvItemBean> lvItemBeanList;
	// 布局加载器
	private LayoutInflater mInflater;
	// 上下文
	private Context context;
	// 布局缓存对象
	private ViewHolder holder;
	//记录当前展开项的索引
	private int expandPosition = -1;

	public LvAdapter(ArrayList<LvItemBean> lvItemBeanList, Context context) {
		super();
		this.lvItemBeanList = lvItemBeanList;
		this.context = context;
		mInflater = LayoutInflater.from(context);
	}

	@Override
	public int getCount() {
		return null == lvItemBeanList ? 0 : lvItemBeanList.size();
	}

	@Override
	public Object getItem(int position) {
		return lvItemBeanList.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		if (null == convertView) {
			convertView = mInflater.inflate(R.layout.activity_main_listview_item, null);
			holder = new ViewHolder();
			holder.tv1 = (TextView) convertView.findViewById(R.id.tv_1);
			holder.tv2 = (TextView) convertView.findViewById(R.id.tv_2);
			holder.tv3 = (TextView) convertView.findViewById(R.id.tv_3);
			holder.llItemTop = (LinearLayout) convertView.findViewById(R.id.ll_item_top);
			holder.llItemBottom = (LinearLayout) convertView.findViewById(R.id.ll_item_bottom);
			holder.bt1 = (Button) convertView.findViewById(R.id.bt_1);
			holder.bt2 = (Button) convertView.findViewById(R.id.bt_2);
			holder.bt3 = (Button) convertView.findViewById(R.id.bt_3);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		LvItemBean lvItemBean = lvItemBeanList.get(position);
		if (null != lvItemBean) {
			holder.llItemTop.setOnClickListener(new OnLvItemClickListener(position));
			holder.bt1.setOnClickListener(new OnBtnClickListener());
			holder.bt2.setOnClickListener(new OnBtnClickListener());
			holder.bt3.setOnClickListener(new OnBtnClickListener());
			//如果点击的是当前项,则将其展开,否则将其隐藏
			if(expandPosition == position){
				holder.llItemBottom.setVisibility(View.VISIBLE);
			}else{
				holder.llItemBottom.setVisibility(View.GONE);
			}
		}

		return convertView;
	}

	class OnLvItemClickListener implements OnClickListener {
		private int position;

		public OnLvItemClickListener(int position) {
			super();
			this.position = position;
		}

		@Override
		public void onClick(View v) {
			//如果当前项为展开,则将其置为-1,目的是为了让其隐藏,如果当前项为隐藏,则将当前位置设置给全局变量,让其展开,这也就是借助于中间变量实现布局的展开与隐藏
			if(expandPosition == position){
				expandPosition = -1;
			}else{
				expandPosition = position;
			}
			notifyDataSetChanged();
		}

	}

	class OnBtnClickListener implements OnClickListener{

		@Override
		public void onClick(View v) {
			switch(v.getId()){
			case R.id.bt_1:
				Toast.makeText(context, "新增按钮被点击", 1).show();
				break;
			case R.id.bt_2:
				Toast.makeText(context, "修改按钮被点击", 1).show();
				break;
			case R.id.bt_3:
				Toast.makeText(context, "删除按钮被点击", 1).show();
				break;
			}
		}

	}

	class ViewHolder {
		TextView tv1;
		TextView tv2;
		TextView tv3;
		LinearLayout llItemTop;
		LinearLayout llItemBottom;
		Button bt1;
		Button bt2;
		Button bt3;
		ImageView ivUpDownArrow;
	}

}

资源代码:

http://download.csdn.net/detail/xiogjie_67/8575521



时间: 2024-10-18 22:36:28

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

安卓Android控件ListView获取item中EditText值

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数

为listview的item中的元素设置onclick事件

表达能力比较差,所以现在解释一下标题的意思:listview的列表项,点击的时候触发的是itemOnClick事件,点击后转向到A页:那么,假如在子项中有一个连接是想转到B页,我们该怎么办呢.这样能明白了吧,好,现在我说一下解决的办法:有两种办法,一种是重写adapter,一种是在你的子项中的元素中设置onclick事件(注意,是在xml中设置onclick元素)我只做了第一种方法,演示如下:我们继承adapter的基类,然后重写getView @SuppressWarnings("unchec

ListView的Item中包含checkbox,Item无法点击的3种解决方案

ListView的Item中包含checkbox,Item无法点击的2种解决方案 1.在checkbox中设置`focusable属性 android:focusable="false" 2.设置Item的布局,焦点不向下传递 android:descendantFocusability="blocksDescendants"

Android控件ListView获取item中EditText值

可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数

listview的item中嵌套多个EditText时的问题

项目需求:列表展示数据,同时可以修改,保存编辑过的数据(编辑某个数据时背景加深). 问题1:当访问数据库,下载数据后使用adapter展示后,由于item中包含EditText,点击某一个EditText,该EditText获得焦点,光标显示,此时滚动listview会发现光标也会跑到别的item的EditText控件里面. 解决方案:在listview的onScrollChangedListener里面设置listview滚动时,listview.requestfocus(). 问题2:编辑某

android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。

转载请声明出处(http://www.cnblogs.com/linguanh/) 先上张效果图: 1,思路简述 这个肯定是要重写 baseAdapter的了,这里我分了两个数据适配器,一个是自定义的 listView的item 风格xml,另一个是该风格xml文件里面的嵌套的GridView数据适配.然后我们需要两个数据辅助类,类似上述,一个是专门来保存在GridView中要显示的每张图片的信息,例如它的url.name.id等等,暂称该辅助类为 UserImgs,大家可以随便增删,另一个是总

android ListView的item中Button(购物数量加减器)

1.临时保存每个item中的显示数量控件的text: HashMap<Integer,Interger> map = new HashMap<Integer,Integer>(); 使用map来保存每条item显示的数量值.EditText在BaseAdapter中的getView() 方法中去显示对应position的map中的值,如下: editText.setText(map.get(position)); 2. "-"和"+"添加点击

简简单单,jquery中,使用checkbox控制div的显示与隐藏

今天开发代码时,发现好久不用jquery就生疏了. 所以作这个记录, 使用checkbox控制div的显示与隐藏. 一,html代码处: <input type="checkbox" name="checkYaml" id="checkYaml" /> Yaml发布 <div id="branch_build_div"> {{ form.branch_build }} </div> 二,JS

Android ListView的Item中的按钮Button和ImageButton共存、抢夺焦点问题

一.问题 公司App要求实现和淘宝类似的功能:从淘宝app某个商品详情点击聊天进入聊天界面,会带入商品信息.点击"发送宝贝链接"按钮,发送一条消息(宝贝链接)给卖家.如图: 在开发中遇到的问题就是,点击"发送宝贝链接"按钮,宝贝链接的消息已发送成功,但是不会再页面上显示,已添加到Adapter且notifyDataSetChanged了.但是当你触摸屏幕滑动后,宝贝链接的消息就会出现. 二.分析 在Android开发中,Button.ImageButton.和Edi