点击右侧的按钮,显示或者隐藏底部的操作布局,实现Item的部分布局的动态显示.
##涉及到的知识点 ## 1.inflate方法的不同参数的含义,以及作用. 2.View的绘制过程,主要包含onMeasure,onLayout,onDraw这三个方法. 3.自定义View. 4.如何控制Item的部分布局的显示,隐藏.
如何控制Item的部分布局的显示,隐藏
实现思路通过标记一个全局变量来记录当前是那个Item正在被操作(右侧按钮被点击),初始化的position是-1,表示所有的底部操作布局都是隐藏的.
/***
* 标记操作下表的位置:从0开始
*/
public int mShowBottomPosition = - 1 ;
同时需要一个状态来标记当前被操作的Item的状态(隐藏或者显示).
/**
* 表示当前position的状态
*/
public int mCurrentPositionStatus = HIDE_BOTTOM ;
public static final int SHOW_BOTTOM = 1 ;
public static final int HIDE_BOTTOM = 0 ;
为Item的右侧按钮添加点击事件,改变mShowBottomPosition的数值为当前点击的position.同时修改mCurrentPositionStatus的状态,如果被点击的Item的底部布局之前处于隐藏状态,则mCurrentPositionStatus = SHOW_BOTTOM,否则mCurrentPositionStatus = HIDE_BOTTOM.然后执行notifyDataSetChanged方法,重新绘制布局. 为右侧的按钮添加点击事件.代码如下:
holder . mGoImage . setOnClickListener ( new OnClickListener ( )
{
@Override
public void onClick ( View v )
{
showOrHideBottom ( holder , position ) ;
}
} ) ;
/**
* 显示或者隐藏底部控制器
*
* @param position 位置
*/
private void showOrHideBottom ( ViewHolder holder , int position )
{
LogUtils . i ( TAG , "mShowBottomPosition111 :" + mShowBottomPosition + " position :" + position ) ;
if ( mShowBottomPosition != position )
{
mShowBottomPosition = position ;
mCurrentPositionStatus = SHOW_BOTTOM ;
} else
{
mShowBottomPosition = position ;
if ( mCurrentPositionStatus = = HIDE_BOTTOM )
{
mCurrentPositionStatus = SHOW_BOTTOM ;
} else
{
mCurrentPositionStatus = HIDE_BOTTOM ;
}
}
mAdapter . notifyDataSetChanged ( ) ;
}