listviewitem(listviewitem隐藏)

http://www.itjxue.com  2023-02-13 14:19  来源:未知  点击次数: 

如何在ListView中设置item的点击事件

给Listview里面Item里的每一个控件怎么设定点击事件

adpter用的是继承的baseadapter,给整个listview 上的 Item 设置点击事件就用listview.setOnItemClickListener(listener)就可以, 下面介绍 如果 给 I tem里面某一 控件设置点击事件。方法是重写 Adapter。

ListView工作原理(针对下面代码):

1. 给ListView设置数据适配器,此处程序是自己重写的Adapter,创建Adapter 的时候主要做下面的工作:

(1)把ListView需要显示的数据传给Adapter

(2)把ListView显示Item的界面传给Adapter

(3)把上下文对象传给Adapter,主要用来得到LayoutInflater对象来得到Item界面

2. 给ListView设置当点击Item对象的时候执行的操作,此处要实现给Item中的各项也就是该程序的三个TextView设置监听器,也就是调用Adapter中的getView函数。

3. getView函数实现的操作是:第一要将Item要显示的数据显示,然后设置监听器,为监听器设置操作。

如何获取listview的item中的内容

解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值.

大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView

中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中

值,就会出现数据紊乱,或者没数据.那么在生成EditText的时候要监控其值的变化.存储下来.

使用方法:

private ListMapString, Object mCheckItemList = new ArrayListMapString, Object();

mAdapter = new ListEditorAdapter(this, mCheckItemList);

m_lvListView.setAdapter(mAdapter);

直接改变mCheckItemList中的数据,然后调用mAdapter.notifyDataSetChanged();就可以更新ListView的数据

当然,直接从mCheckItemList也可以获得用户在EditText中输入的数据.比较方便

其他:

ListView list= (ListView)findViewById(R.id.list);//获得listview

for (int i = 0; i list.getChildCount(); i++) {

LinearLayout layout = (LinearLayout)list.getChildAt(i);// 获得子item的layout

EditText et = (EditText) layout.findViewById(R.id.et);// 从layout中获得控件,根据其id

// EditText et = (EditText) layout.getChildAt(1)//或者根据位置,在这我假设TextView在前,EditText在后

System.out.println("the text of "+i+"'s EditText:-----------"+et.getText());

}

如何获取ListView可见Item数

项目需要统计listview中每个“曝光”的item的数据,即,随着滑动,某个item由不可见到可见,那我就需要把这个item的index获取到,以便后续操作。当然,如果某个item已经是可见的,那么在滑动的时候如果没有划出屏幕之外,就不再“曝光”,以免造成重复“曝光”,但是当已经“曝光”的item划出屏幕之后再次划入屏幕变成可见,那么需要重新“曝光”,解决办法如下:

实现OnScrollListener接口,重写onScroll方法,listview滑动时会调用onScroll方法,在这个方法里展开逻辑判断,具体代码如下:

先定义一个visibleList存储上一次屏幕上可见的item的index:

private ListInteger visibleList = new ArrayListInteger

在定义一个list存储每次滑动后屏幕上可见的item的index,然后在onscroll里比较两个list,找出两个list里不同的元素即可得到新“曝光”的item的index,这些新的index必定是由不可见变为可见的。代码如下:

@Override

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

// TODO Auto-generated method stub

if (performanceWidgetTicket != null mLiveShowTicketList != null) {//这行代码是我的数据操作所需要的null判断,可换成你需要的条件

// 比较两次可见的item的序号,只曝光新出现的

ArrayListInteger list = new ArrayListInteger(visibleItemCount);

// 将最新可见item的index加入到临时list中

for (int i = firstVisibleItem; i firstVisibleItem + visibleItemCount; i++) {

list.add(i);

}

if (visibleList != null list != null) {

//新可见item的index的集合

ArrayListInteger diffList = getDiffrent(list, visibleList);

if (diffList != null) {

for (int x = 0; x diffList.size(); x++) {

// 曝光操作

// 在这里做相应操作

LogUtils.LOGD(TAG, "diffList.get(x):" + diffList.get(x));

}

//更新list,将最新的可见item的index加入到list

visibleList.clear();

visibleList.addAll(list);

}

}

//清空最新可见item的index的list

if (list != null) {

list.clear();

}

}

}

/**

* @MethodName:getDiffrent

* @tags:@param list1

* @tags:@param list2

* @tags:@return

* @return_type:ArrayListInteger

* @exception

* @TODO:取出两个list中不同的元素加入到新的list

* @since

*/

private ArrayListInteger getDiffrent(ListInteger list1, ListInteger list2) {

long st = System.nanoTime();

ArrayListInteger diff = new ArrayListInteger();

for (Integer index : list1) {

if (!list2.contains(index)) {

diff.add(index);

}

}

return diff;

}

如何获取listview的item

得到listview中的itemview具体方法如下:

在getView()方法中,给convert View设置setTag(),可以将position或者view设置完成后进去,然后在on Click方法中通过getTag()获得所设置的值,就完成获取任务了。

ListView项(Item)的三种布局

自定义的布局,使用了相对布局(RelativeLayout,见list_item.xml),左侧一个图片,右侧上方是字体比较大的title,下方是字体稍小的description;

第二种是Android自带的布局(见源码里的simple_list_item_2.xml),主要是一个垂直的LinearLayout,里面包含两个ID分别为text1、text2的TextView,这两个TextView的字体大小不一样,一个带textAppearanceLarge属性,另外一个带textAppearanceSmall属性;

第三种也是Android自带的布局(见源码里的two_line_list_item.xml),主要是一个垂直的LinearLayout,里面包含两个ID分别为text1、text2的TextView,这两个TextView的字体大小一样,但每个TextView还带一个字体加粗的属性。

构造函数: SimpleAdapter(Context context, List data, int resource, String[] from, int[] to)

参数有5个:

context:也就是上下文,而Activity都是继承于Context的,所以这个参数一般使用Activity的实例;

data:类型要为一个List的子类,且List中的每个元素都必须为Map的子类,每个Map中以有一对或多对的Key-Value对,这些值与下面的参数from有对应;

resource:这是每个List项(Item)对应的XML布局资源文件名,在里面控制List项显示的元素以及相对位置;

from:是一个字符串数组,可以理解为列名,对应于data数据中Map元素的Key值,只有包含在这个字符串数组的元素对应到Map中的Value值才能显示到TextView中(这些TextView在最后一个参数to配置),所以这些Value值需要为字符串或者有toString()的方法;

to:TextView组件ID的数组,上面的from参数配置了Key值,而根据这个Key值从data参数里的map取出的value值需要设置到TextView中,而这些TextView的id需要在这个数组中配置。而且这些TextView需要在参数resource对应的XML资源文件中配置。

(责任编辑:IT教学网)

更多

推荐新手入门文章