给listview默认选中里面item里的第一个控件怎么设定选中事件

[Android开发][文章]Androidlistview上Item中某个控件的监听事件问题
[Android开发][文章]Androidlistview上Item中某个控件的监听事件问题
更新: 00:23:52
今天遇到了个问题:listview上的每个Item中有个Button控件,然后为其设置监听事件,不知道为什么点击这个Button后有时候没反应(只有滑动一下listview才有反应),求解,希望大大们帮忙。
ListView默认情况
当item有焦点时,item上的button等子控件获取不到焦点;
当子控件有焦点时,item无焦点无法响应onItemClick事件
ViewGroup.FOCUS_AFTER_DESCENDANTS:表示item的子控件优先于item获得焦点;
ViewGroup.FOCUS_BEFORE_DESCENDANTS:表示item优先于其子控件获得焦点。
listView.setOnItemSelectedListener(onItemSelectedListener);
private AdapterView.OnItemSelectedListener&&onItemSelectedListener =
new AdapterView.OnItemSelectedListener(){
public void onItemSelected(AdapterView&?& parent, View view,
& &int position, long id) {
&&//当此选中的item的子控件需要获得&strong&焦点&/strong&时
&&parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
&&//else parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
public void onNothingSelected(AdapterView&?& parent) {
&&parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
你看看整体item的点击事件能响应么?我感觉是获取焦点的问题啊?
你看看整体item的点击事件能响应么?我感觉是获取焦点的问题啊?
我也感觉是获取焦点的问题,可是不知道怎么破
我也感觉是获取焦点的问题,可是不知道怎么破
你先看看你整个item的点击能响应么?如果也不能的话就& &&&好办了- -
你先看看你整个item的点击能响应么?如果也不能的话就& &&&好办了- -
我在listview上加个android:focusable=&false&了& & 所以整个的是不行的
ListView默认情况
当item有焦点时,item上的button等子控件获取不到焦点;
真心谢谢你&&由于你的帮助我的问题解决了
查看原网页[0]&
举报本内容
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& 14:21:02
&&网站联系: qq: email:&
Android开发资料网VB编程、代码、技术问题解决方案
如何实现listview的ItemDbClick事件
方案整理者:tanxueping &&&&&& 发布时间:
listview有itemclick事件有dbclick事件,但我希望实现双击item事件,请问如何实现?
推荐解决方案
Private&Sub&ListView1_DblClick()
dim&itemX&as&ListItem
set&itemx=listview1.HitTest(x,y)
if&itemX&is&nothing&then
&&&exit&sub
&&&'选中,处理
其他解决方案
在MouseDown事件中记录鼠标点击的x,y值,在双击事件中判断ListView的HitTest(x,&x)方法反回的是不是Nothing,如果不是则说明是双击的一个ListItem对象,然后执行你的事件代码就行
在窗体代码定义窗体级变量
dim&iItemIndex&as&integer
然后在item_click事件中得到iItemIndex&=item.index
最后在dbclick事件中使用iItemIndex
简单点说就是:从item_click得到item的序号,在dbclick里面使用得到的序号
我希望的是对项目双击执行过程,如果不是对项目进行双击,例如在空白处双击就不执行过程了。至于item.index,我是在itemclick事件中就把值赋好了。
可以给个简单的例子吗?谢谢
我用isnull(listview1.hittest(listx,listy))判断都是false呀,不管点那里都是false。请给个简单的例子,谢谢
应该这样做
Private&Sub&ListView1_DblClick()
&&&&dim&t1&as&string,t2&as&string
&&&&If&ListView1.ListItems&Is&Nothing&Then&Exit&Sub
&&&&t1&=&Trim(ListView1.SelectedItem.Text)&'你选中的listview的第一列
&&&&t2=Trim(ListView1.SelectedItem.SubItems(1)) &'你选中的listview的第二列
&&&...加入相应的处理
If&ListView1.ListItems&Is&Nothing&Then&Exit&Sub
不行呀,我点空白的地方,他还是执行过程啊~~~
我的意思是,只有双击item才执行过程啊,不管里面有没有item,只要双击item&就执行过程,双击空白的地方,有item也不执行过程,就像你打开我的电脑一样,你要双击文件夹才打开文件夹,双击空白地方不执行操作呀。。。
那位朋友有什么好的方法请帮忙。。1602人阅读
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout android:orientation=&horizontal&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:paddingLeft=&10dp&
android:paddingRight=&10dp&
android:paddingTop=&1dp&
android:paddingBottom=&1dp&
xmlns:android=&/apk/res/android& &
android:id=&@+id/scoreId&
android:layout_width=&60dip&
android:layout_height=&30dip&
android:textSize=&10pt&
android:singleLine=&true&/&
&TextView android:id=&@+id/userName&
android:layout_width=&80dip&
android:layout_height=&30dip&
android:textSize=&10pt&
android:singleLine=&true&/&
&TextView android:id=&@+id/userScore&
android:layout_width=&80dip&
android:layout_height=&30dip&
android:textSize=&10pt&
android:singleLine=&true&/&
&/LinearLayout&
scorelist.xml
&?xml version=&1.0& encoding=&utf-8&?&
& &LinearLayout android:orientation=&vertical&
&&& android:layout_width=&fill_parent&
&&& android:layout_height=&fill_parent&
&&& xmlns:android=&/apk/res/android& &
&&& & &LinearLayout
&&&& &&& &android:id=&@+id/listLinearLayout&
&&&& &&& &android:orientation=&horizontal&
&& &&&& android:layout_width=&fill_parent&
&& &&&& android:layout_height=&wrap_content&&
&& &&& &&ListView
&& &&& &&& &android:id=&@+id/listView&
&& &&&& &&& &android:layout_width=&fill_parent&
&& &&& &&& &android:layout_height=&wrap_content&
&& &&& &/&
&& && &/LinearLayout&
& &/LinearLayout&
public class ScoreListActivity extendsActivity {
&&& @Override
&& &protected void onCreate(Bundle savedInstanceState) {
&& &&& &super.onCreate(savedInstanceState);
&& &&& &setContentView(R.layout.scorelist);
&& &&& &ListView listView=(ListView) findViewById(R.id.listView);
&& &&& &ScoreDao scoreDao=new ScoreDao(ScoreListActivity.this);
&& &&& &List&UserScore& userScores=scoreDao.getAllScore();
&& &&& &ArrayList&HashMap&String,Object&& list=new ArrayList&HashMap&String,Object&&();
&& &&& &for (UserScore userScore : userScores) {
&& &&& &&& &HashMap &String,Object& map=new HashMap &String,Object&();
&& &&& &&& &map.put(&scoreId&, userScore.getId());
&& &&& &&& &map.put(&userName&, userScore.getUserName());
&& &&& &&& &map.put(&userScore&, userScore.getUserScore());
&& &&& &&& &list.add(map);
&& &&& &SimpleAdapter adapter=new SimpleAdapter(ScoreListActivity.this,
&& &&& &&& &&& &list,R.layout.item, new String[]{&scoreId&,&userName&,&userScore&},
&& &&& &&& &&& &new int[]{R.id.scoreId,R.id.userName,R.id.userScore});
&& &&& &listView.setAdapter(adapter);
&& &&& &listView.setOnItemClickListener(new OnItemClickListener() {
&& &&& &&& &@Override
&& &&& &&& &public void onItemClick(AdapterView&?& parent, View view,
&& &&& &&& &&& &&& &int position, long id) {
&& &&& &&& &&& &//parent是被点击的那个ListView
&& &&& &&& &&& &ListView listView = (ListView)
&& &&& &&& &&& &HashMap&String, Object& item = (HashMap&String, Object&)listView.getItemAtPosition(position);
&& &&& &&& &&& &//获取被选中行对应的ID
&& &&& &&& &&& &Object scoreId=item.get(&scoreId&);
&& &&& &&& &&& &Toast.makeText(ScoreListActivity.this,scoreId.toString(), Toast.LENGTH_LONG).show();
&& &&& &&& &}
&& &&& &});
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:554516次
积分:8164
积分:8164
排名:第1129名
原创:243篇
转载:47篇
评论:178条
(2)(1)(1)(1)(2)(2)(2)(1)(8)(4)(4)(1)(6)(4)(8)(2)(1)(1)(4)(5)(8)(1)(5)(5)(4)(16)(5)(2)(1)(2)(2)(1)(1)(2)(3)(4)(3)(1)(1)(7)(6)(1)(1)(2)(4)(8)(13)(2)(8)(32)(52)(23)(2)(4)下次自动登录
现在的位置:
& 综合 & 正文
设置ListView条目里面组件的监听事件
设置listView条目里面组件的监听事件步骤:
首先,设置ListView的OnItemClickListener事件
然后,在OnItemClickListener 的回调方法onItemClick方法里面通过参数view.findViewById(...)来设置各条目组件的监听事件即可。
具体例子如下:
public class ChatFragment extends Fragment implements OnItemClickListener ,OnClickListener{
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View sessionListView = inflater.inflate(R.layout.message_session_list, container, false);
ListView sessionList = (ListView)sessionListView.findViewById(R.id.message_session_list_listcontacts);
List&HashMap&String,String&& sessionListData = new ArrayList&HashMap&String,String&&();
HashMap&String,String&item1 = new HashMap&String,String&();
item1.put("count", "45");
item1.put("phoneNum", "");
item1.put("name", "cheng yang");
item1.put("latestDate", "12-23");
sessionListData.add(item1);
SimpleAdapter adapter = new SimpleAdapter(getActivity(), sessionListData, R.layout.message_session_item, new String[]{
"count","phoneNum","name","latestDate"
}, new int[]{
R.id.message_session_item_count,R.id.message_session_item_phoneNum,R.id.message_session_item_name,R.id.message_session_item_latestDate
sessionList.setAdapter(adapter);
sessionList.setOnItemClickListener(this);
return sessionListV
public void onItemClick(AdapterView&?& parent, View view, int position,
long id) {
view.findViewById(R.id.message_session_item_rightSide).setOnClickListener(this);
view.findViewById(R.id.message_session_item_portrait).setOnClickListener(this);
public void onClick(View v) {
Log.i("MainActivity","view id:"+v.getId());
switch(v.getId()){//user clicked the portrait
case R.id.message_session_item_portrait:
Toast.makeText(getActivity(), "Image Clicked !", Toast.LENGTH_LONG).show();
case R.id.message_session_item_rightSide://user clicked the left part of an item
Toast.makeText(getActivity(), "Item Left Part Was Clicked !",Toast.LENGTH_LONG).show();
&&&&推荐文章:
【上篇】【下篇】解决ListView里TextView设置LinkMovementMethod后导致其ItemClick失效的问题
最近在做项目研发过程中有这样一个需求:ListView的Item里的子控件TextView要设置超链接、指定文字高亮显示,然后点击超链接后跳转到指定URL的网页。实现超链接
最近在做项目研发过程中有这样一个需求:ListView的Item里的子控件TextView要设置超链接、指定文字高亮显示,然后点击超链接后跳转到指定URL的网页。实现超链接的跳转这很容易,只要通过对TextView设置SpannableString对象即可,即如下代码:TextView tv = (TextView)findViewById(R.id.tv);
SpannableString sp = new SpannableString("此处为tv里显示的内容");
sp.setSpan( new
URLSpan( "" ), 3 ,
8 , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(sp);
tv.setMovementMethod(LinkMovementMethod.getInstance());通过这样的设置后已经能够实现对超链接点击跳转到指定URL的网页了,可麻烦又来了,你会发现点击ListView里的Item时没有任何反应,这是什么原因呢?还记得上面在设置超链接的时候有这样一条语句:tv.setMovementMethod(LinkMovementMethod.getInstance());我们现在把这条语句注释掉看看……run App,结果点击Item的时候能够响应了,可惜超链接又失效了,任你点击也没有响应了,哎,真可谓是“鱼和熊掌不可兼得”。现在已经断定Item失效的原因何在了,那为什么这条语句就会导致Item点击失效呢?源码往往是揭开程序中各种奇芭问题的尖锐利器,让我们跟踪下源码吧……打开TextView的源码文件,截取的关键代码片段如下:该代码片段是TextView源码的第1421行(Android4.2.2版本),我们发现不能通过重写此方法来解决我们所面临的问题,再继续跟踪LinkMovementMethod这个类吧,关键源码如下:
public boolean onTouchEvent(TextView widget, Spannable buffer,
MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP ||
action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
//获取textview里的超链接对象,并用ClickableSpan数组盛装
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
if (link.length != 0) { //此处是对超链接点击事件进行处理……
if (action == MotionEvent.ACTION_UP) {
link[0].onClick(widget);
} else if (action == MotionEvent.ACTION_DOWN) {
Selection.setSelection(buffer,
buffer.getSpanStart(link[0]),
buffer.getSpanEnd(link[0]));
//处理结束后返回true,这里一定要注意:当返回值为true时则表示点击事件已经被,就再也不会继续传递了
Selection.removeSelection(buffer);
return super.onTouchEvent(widget, buffer, event);
}上述源码为LinkMovementMethod类的第188行。发现了Item点击失效的原因是因为onTouch方法总是返回true而并没有根据不同的情况来作处理,此时大家可能会想直接对这个方法重写就能解决问题了。我和大家想的也一样,对该方法重写,并根据情况返回true或false,遗憾的是还是没有效果,并且在重写的方法里看不到输出的日志信息,暂时不明其中原因,请高手赐教!眼看就要看到光明了,可还是被打击了……不要灰心,面包总是会有的,如果你不放弃的话,哈哈。换个keywords google一下,终于找到国外的一个网站,上面的文章标题是:此时此刻的心情真是如获至宝呀……接着看下去……发现有高人是这样解决的:发现这位高人本质思路是我们开始分析的本质思路一样,只不过他把要处理的代码放在了TextView的onTouch方法里,然后根据不同的情况返回true或false.在getView()方法里对相应的TextView进行设置吧,Run app……见证奇迹的时刻到了……哈哈,结果真的能行了,耶哦!原文链接:经过此劫,我发现了为什么国外的技术总是比国内要先进得多了,我在此并不是贬低同僚,不支持国产,而是在国内的技术普遍都是你抄我,我抄你的,有的甚至连原文链接都不放……大家可以看看国外这个技术网站人家是怎么解决问题的,真是按部就班,循序渐进的,不仅让你知其然还知其所以然。欢迎加入QQ讨论群:本文出自 “严富坤-编程技术” 博客,请务必保留此出处,
你最喜欢的

我要回帖

更多关于 listview item选中 的文章

 

随机推荐