listviewitem,listviewitem隐藏

http://www.itjxue.com  2023-01-08 00:55  来源:未知  点击次数: 

Android listview的item点击事件怎么失效了

在android里面,点击屏幕之后,点击事件会根据你的布局来进行分配的,当你的ListView里面增加了button之后,点击事件第一优先分配给你listView里面的button。

所以你的点击Item就失效了,这个时候你就要根据你的需求,是给你的item的最外层layout设置点击事件,还是给你的某个布局元素添加点击事件了。

如果你点击的时候涉及到一些值的问题,可以放到元素的tag中存储,到Oclick事件中再拿出来用。

如果我的回答没帮助到您,请继续追问。

如何获取ListView中Item的行数

行数 int nItemNum = m_list.GetItemCount();

列数 int nHeadNum = m_list.GetHeaderCtrl()-GetItemCount();

1、 ListCtrl添加左键单击(NM_CLICK)函数(这个很重要)。

2、 ListCtrl风格设置(一般是网格)。

一般listctrl默认view风格为report,一般在OnInitDialog函数中:

LONG m_lStyle;

m_lStyle = GetWindowLong( m_list.m_hWnd , GWL_STYLE);//获取当前窗口style

m_lStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)

m_lStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)

//m_lStyle |= LVS_SHOWSELALWAYS;//一直选中item

m_list.SetExtendedStyle( m_lStyle );//设置扩展风格

3、 插入数据

一般在OnInitDialog函数中:

//m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );

//插入列

m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );

int nRow = m_list.InsertItem(0, "11");//插入行

m_list.InsertItem(1,"12");

m_list.SetItemText(nRow, 1, "jacky");//设置数据

m_list.SetItemText(nRow+1, 1, "James");

4、 得到listctrl中所有行的checkbox的状态

在OnNMClickList1函数中:

方法一:

m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);

CString str;

for(int i=0; im_list.GetItemCount(); i++)

{

if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))

{

str.Format(_T("第%d行的checkbox为选中状态"), i+1);

AfxMessageBox(str);

}

}

方法二:

POSITION pos = m_list.GetFirstSelectedItemPosition();

CString str;

if (pos == NULL)

TRACE0("No items were selected!/n");

else

{

while (pos)

{

int nItem = m_list.GetNextSelectedItem(pos);

str.Format(_T("选中了第%d行"), nItem+1);

AfxMessageBox(str);

}

}

5、 删除所有列(即清空)

while ( m_list.DeleteColumn (0));

6、 得到单击的listctrl的行列号

// 方法一:

DWORD dwPos = GetMessagePos(); //返回表示屏幕坐标下光标位置的长整数值

CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

m_list.ScreenToClient(point); //把屏幕上指定点的屏幕坐标转换成用户坐标

LVHITTESTINFO lvinfo;

lvinfo.pt = point;

lvinfo.flags = LVHT_ABOVE;

int nItem = m_list.SubItemHitTest(lvinfo);

if(nItem != -1)

{

CString strtemp;

strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem);

AfxMessageBox(strtemp);

}

// 方法二:

NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

if(pNMListView-iItem != -1)

{

CString strtemp;

strtemp.Format("单击的是第%d行第%d列", pNMListView-iItem, pNMListView-iSubItem);

AfxMessageBox(strtemp);

}

7、 右键点击listctrl的item弹出菜单

在资源里画菜单

添加listctrl控件的NM_RCLICK消息相应函数

//右键单击的函数

void CListCtrlDlg::OnNMRclickList1(NMHDR *pNMHDR, LRESULT *pResult)

{

NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

if(pNMListView-iItem != -1)

{

DWORD dwPos = GetMessagePos(); //返回表示屏幕坐标下光标位置的长整数值

CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

CMenu menu;

VERIFY( menu.LoadMenu( IDR_MENU1 ) );

CMenu* popup = menu.GetSubMenu(0); //取得被指定菜单激活的下拉式菜单或子菜单的句柄

ASSERT( popup != NULL );

popup-TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x, point.y, this ); //在指定位置显示快捷菜单,并跟踪菜单项的选择

}

*pResult = 0;

}

如何设置listview每个item高度

1.在ListView的布局文件中把属性android:layout_height设置成"wrap_content"

ListView

android:cacheColorHint="#00000000"

android:textColor="#ff435346"

android:textSize = "20sp"

android:id="@id/android:list"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout="@+id/textViewCurrentBase"

android:listSelector="#00000000"

android:drawSelectorOnTop="false"/

2.设置子项xml文件(比如这里把一个item.xml设置成ListView的一行)的各个控件android:layout_height的值。这里80sp+40sp就是你需要的一行的高度了。

item.xml如下:

?xml version="1.0" encoding="utf-8"?

RelativeLayout xmlns:android=""

android:id="@+id/TextView01"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

TextView android:focusable="false"

android:textColor="@drawable/white"

android:id="@+id/ItemTitle"

android:layout_height="80sp"

android:layout_width="fill_parent" /

TextView android:focusable="false"

android:id="@+id/ItemText"

android:textColor="@drawable/blue"

android:layout_height="40sp"

android:layout_width="wrap_content"

android:layout_below="@+id/ItemTitle" /

Button

android:id="@+id/ItemButton"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_alignParentRight="true" /

/RelativeLayout

希望有用。

如何在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中的itemview具体方法如下:

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

(责任编辑:IT教学网)

更多

推荐微软认证文章