求羞羞的铁拳在线观看或百度云?

ListView点击Item展开菜单实现代码详解
作者:Snser
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了ListView点击Item展开菜单实现代码详解的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
ListView点击item显示菜单是要实现这样的效果:
需要实现的逻辑如下:
1)点击一个普通item,展开当前菜单,同时关闭其他菜单
2)点击一个已展开的菜单,隐藏当前菜单
3)将展开菜单滑到listview之外,再滑动回来,展开菜单状态不变
4)点击菜单中的按钮,能够根据不同item进行不同的处理
二、实现思路
1、UI布局上,对于这种每个listitem都包含动态显示菜单的场景,可以直接在listitem的xml布局里就包含两部分元素:item本身以及展开菜单
点击item的时候,动态控制展开菜单这部分元素的Visibility就可以了
2、逻辑控制上,需要额外记录当前展开菜单的item是谁,这样可以方便高效的实现概述中描述的逻辑
三、开始干活
实现的代码结构不复杂,这里直接贴代码了:
listview_menu.xml:
&LinearLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#EEEEEE"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" &
android:id="@+id/listview_menu_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null" /&
&/LinearLayout&
listview_menu_item.xml:
&LinearLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/background_light"
android:orientation="vertical"
android:descendantFocusability="blocksDescendants" &
android:id="@+id/listview_menu_item_txt"
android:layout_width="match_parent"
android:layout_height="50dp"
android:textStyle="bold"
android:textSize="20sp"
android:textColor="@android:color/black"
android:text="123" /&
&LinearLayout
android:id="@+id/listview_menu_item_menu"
android:layout_width="match_parent"
android:layout_height="50dp"
android:visibility="visible"
android:orientation="horizontal" &
android:id="@+id/listview_menu_item_menu_toast"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#8080FF"
android:textColor="@android:color/black"
android:textSize="15sp"
android:text="提示" /&
android:id="@+id/listview_menu_item_menu_collapse"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#80FF80"
android:textColor="@android:color/black"
android:textSize="15sp"
android:text="收起" /&
&/LinearLayout&
&/LinearLayout&
ListViewMenuActivity.java:
public class ListViewMenuActivity extends Activity {
private int mExpandedMenuPos = -1;
private ListViewAdapter mA
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_menu);
ArrayList&Integer& data = new ArrayList&Integer&();
for (int index = 0; index != 40; ++index) {
data.add(index);
ListView list = (ListView)findViewById(R.id.listview_menu_list);
list.setAdapter(mAdapter = new ListViewAdapter(this, data));
list.setOnItemClickListener(new OnListItemClickListenser());
private class ListViewAdapter extends BaseAdapter {
private LayoutInflater mLayoutI
private ArrayList&Integer& mListD
private OnMenuClickListenser mOnMenuClickListenser = new OnMenuClickListenser();
private class ViewHolder {
public ViewHolder (View viewRoot) {
root = viewR
txt = (TextView)viewRoot.findViewById(R.id.listview_menu_item_txt);
menu = viewRoot.findViewById(R.id.listview_menu_item_menu);
btnToast = (Button)viewRoot.findViewById(R.id.listview_menu_item_menu_toast);
btnCollapse = (Button)viewRoot.findViewById(R.id.listview_menu_item_menu_collapse);
public TextV
public Button btnT
public Button btnC
public ListViewAdapter(Context context, ArrayList&Integer& data) {
mLayoutInflater = LayoutInflater.from(context);
mListData =
public int getCount() {
return mListData == null ? 0 : mListData.size();
public Object getItem(int position) {
return mListData == null ? 0 : mListData.get(position);
public long getItemId(int position) {
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.listview_menu_item, parent, false);
convertView.setTag(new ViewHolder(convertView));
if (convertView != null && convertView.getTag() instanceof ViewHolder) {
final ViewHolder holder = (ViewHolder)convertView.getTag();
holder.txt.setText(String.valueOf(getItem(position)));
if (position % 2 == 0) {
holder.root.setBackgroundColor(0xFFC9EEFE);
holder.root.setBackgroundColor(0xFFFFFFFF);
holder.menu.setVisibility(position == mExpandedMenuPos ? View.VISIBLE : View.GONE);
holder.btnToast.setText("提示" + position);
holder.btnCollapse.setText("收起" + position);
holder.btnToast.setOnClickListener(mOnMenuClickListenser);
holder.btnCollapse.setOnClickListener(mOnMenuClickListenser);
return convertV
private class OnMenuClickListenser implements View.OnClickListener {
public void onClick(View v) {
final int id = v.getId();
if (id == R.id.listview_menu_item_menu_toast) {
Toast.makeText(ListViewMenuActivity.this, "提示" + mExpandedMenuPos, Toast.LENGTH_SHORT).show();
} else if (id == R.id.listview_menu_item_menu_collapse) {
mExpandedMenuPos = -1;
notifyDataSetChanged();
private class OnListItemClickListenser implements OnItemClickListener {
public void onItemClick(AdapterView&?& parent, View view, int position, long id) {
if (position == mExpandedMenuPos) {
mExpandedMenuPos = -1;
mExpandedMenuPos =
mAdapter.notifyDataSetChanged();
四、demo视频
[转载请保留本文地址:
五、demo工程
保存下面的图片,扩展名改成 .zip 即可
以上所述是小编给大家介绍的ListView点击Item展开菜单实现代码详解的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具12596人阅读
Android(29)
在android中listview控件使用的比较多,如果在listview上面有些动画会增色不少,listview上面的动画确实也不少,好多动画基本都是国外的大神写的。
有个github的下载地址里面包含了各种各样的listview动画,地址:。
我这个也是看了别人写的,摘抄了下。因为自己也是个菜鸟。
首先定义一个listview中适配器一行的布局:
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:orientation=&horizontal& &
&ImageButton
android:id=&@+id/cell_trash_button&
android:layout_width=&48dp&
android:layout_height=&48dp&
android:src=&@drawable/trash_can&
android:scaleType=&fitXY& /&
android:id=&@+id/cell_name_textview&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_gravity=&center_vertical|left&
android:layout_marginLeft=&16dp&
android:layout_weight=&1&
android:text=&cell name& /&
&/LinearLayout&
然后定义一个适配器对象ArrayAdapter:
public class MyAnimListAdapter extends ArrayAdapter&MyCell& {
private LayoutInflater mI
private int resId;
public MyAnimListAdapter(Context context, int textViewResourceId, List&MyCell& objects) {
super(context, textViewResourceId, objects);
this.resId = textViewResourceId;
this.mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
public View getView(final int position, View convertView, ViewGroup parent) {
MyCell cell = (MyCell)getItem(position);
if (convertView==null) {
view = mInflater.inflate(R.layout.chain_cell, parent, false);
setViewHolder(view);
else if (((ViewHolder)convertView.getTag()).needInflate) {
view = mInflater.inflate(R.layout.chain_cell, parent, false);
setViewHolder(view);
view = convertV
vh = (ViewHolder)view.getTag();
vh.text.setText(cell.name);
vh.imageButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
deleteCell(view, position);
private void setViewHolder(View view) {
ViewHolder vh = new ViewHolder();
vh.text = (TextView)view.findViewById(R.id.cell_name_textview);
vh.imageButton = (ImageButton) view.findViewById(R.id.cell_trash_button);
vh.needInflate =
view.setTag(vh);
}然后定义个动画监听和动画对象:
private void deleteCell(final View v, final int index) {
AnimationListener al = new AnimationListener() {
public void onAnimationEnd(Animation arg0) {
mAnimList.remove(index);
ViewHolder vh = (ViewHolder)v.getTag();
vh.needInflate =
mMyAnimListAdapter.notifyDataSetChanged();
@Override public void onAnimationRepeat(Animation animation) {}
@Override public void onAnimationStart(Animation animation) {}
collapse(v, al);
private void collapse(final View v, AnimationListener al) {
final int initialHeight = v.getMeasuredHeight();
Animation anim = new Animation() {
protected void applyTransformation(float interpolatedTime, Transformation t) {
if (interpolatedTime == 1) {
v.setVisibility(View.GONE);
v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
v.requestLayout();
public boolean willChangeBounds() {
if (al!=null) {
anim.setAnimationListener(al);
anim.setDuration(ANIMATION_DURATION);
v.startAnimation(anim);
}上面主要是getview中调用删除每一个item的动画实现,后面随便定义一个listview对象和数据源把这个listview显示出来就行看到效果了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:637731次
积分:2761
积分:2761
排名:第10924名
原创:33篇
转载:16篇
评论:82条
(1)(10)(4)(1)(4)(2)(1)(1)(1)(4)(1)(8)(4)(4)(5)大神快来插一个!_神之刃吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:68,580贴子:
大神快来插一个!
风魔龙到底用什么魂呢?感觉永生输出好点,双抗高。但是嗜血可以激活不死,是不是血更多。还有邢行,我还没见过,可搭配什么圣痕?
打高法波 变成这样
这是个啥啊?摸了一下还...
我和他揭示了这么长时间...
电一的大神们你们怎么看...
主做三星、vivo等型号分离屏技术培训
其名为炎,其职为剑.显现吧,啃噬吾身,化为经验.
__淘手游诺诺 ___TaoShouYou../
无敌流行刑,不用练。如果不是无敌流单纯斗兽或者竞技场还是龙魂好。
我在纠结这个帖子要不要水毕竟水贴也要有节操
贴吧热议榜
使用签名档&&
保存至快速回贴ListView每次滚动一个item位置
客户要求点击某个按钮,ListView每次滚动一个item位置,求教
用setPosition()方法。
--- 共有 2 条评论 ---
错了,是setSelection()
listView.scrollTo(x, y);
--- 共有 1 条评论 ---}

我要回帖

更多关于 羞羞的铁拳百度云资源 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信