`
asetbug
  • 浏览: 26427 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】自定义ListView无法响应OnItemClickListener中的onItemClick方法问题解决方案

阅读更多
  Android中自定义ListView无法响应OnItemClickListener中的onItemClick方法问题解决方案
  
在Android软件设计与实现中我们通常都会使用到ListView这个控件,系统有一些预置的Adapter可以使用,例如SimpleAdapter和ArrayAdapter,但是总是会有一些情况我们需要通过自定义 ListView来实现一些效果,那么在这个时候,我们通常会碰到自定义ListView无法选中整个ListViewItem的情况,也就是无法响应 ListView的onItemClickListener中的onItemClick()方法,究竟是为什么呢?

我之前也在网上查过不少的资料,但是没有发现什么有价值的文章,有一些是建议在Adapter的getView方法中对自己需要响应单击事件的控件进行设置。但是最终的效果并不是特别理想,而且我认为这是一种取巧的方式,并不推荐

  我们看到了一行代码定义的变量的意思是“当前View将屏蔽他所有子控件的Focus状态,即便这些子控件是可以Focus的”,其实这段话的意思就是这个变量代表着当前的View将不顾其子控件是否可以Focus自身接管了所有的Focus,通常默认能获得focus的控件有 Button,Checkable继承来的所有控件,这就意味着如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView 中Item中包含的所有控件的focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了,也就会响应onItemClickListener中的onItemClick()方法.

然而将ListView的Item Layout的子控件focusable属性设置为false有点繁琐,我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendant”即可,这样Item Layout就屏蔽了所有子控件获取Focus的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性了,

如此就可以顺利的响应onItemClickListener中的 onItenClick()方法了。
分享到:
评论

相关推荐

    Android ListView 之 自定义Adapter 实现列表条目功能,以及 OnItemClickListener(点击事件) OnScrollListener(滑动事件)事件监听

    Android ListView 之 自定义Adapter 实现列表条目功能,以及 OnItemClickListener(点击事件) OnScrollListener(滑动事件)事件监听   目录 Android ListView 之 自定义Adapter 实现列表条目功能,以及 ...

    Android 中ListView的Item点击事件失效的快速解决方法

    在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布局和自定义adapter了,一般是继承于BaseAdapter,示例代码见下方。写ListView的点击...

    Android ListView获得选项中的值

    那你现在肯定已经在listview 的item里面放了两个控件吧,假如是textview吧,那你就首先要给listview添加一个OnItemClickListener来监听你点击了那个item,在这个OnItemClickListener里面有个onItemClick方法,...

    Android ListView position详解及实例代码

     在使用listview的时候,我们经常会在listview的监听事件中,例如OnItemClickListener(onItemClick)中,或listview的adapter中(getView、getItem、getItemId等)看到position这个变量。在我们没有为listview添加...

    ListView-添加item的事件监听实例

    onItemClick(AdapterView<?> parent, View view, int position, long id) parent:官方解释为:The AdapterView where the click happened,也就是用户所点击的AdapterView,这个参数一般不用。 view:当前...

    Android 中ListView setOnItemClickListener点击无效原因分析

    主要介绍了Android 中ListView setOnItemClickListener点击无效原因分析的相关资料,需要的朋友可以参考下

    自定义键盘PopupWindows弹出

    资源共享是每个android开发的责任,使用方法 private NumberKeyBoard dpk; private View passwdview; dpk = new NumberKeyBoard(this); passwdview = dpk.setup(); mListView.setOnItemClickListener(new ...

    军棋安卓版源码

    lineupListview = (ListView) findViewById(R.id.lineup_listview); lineupListview.setVisibility(View.INVISIBLE); // getLineupListviewData(); lineupListview.setOnItemClickListener(new AdapterView....

    Android 实现ListView的点击变色的实例

    Android 实现ListView的点击变色的实例 我做了一个音乐播放器,其中用... private class ListViewClickListener implements OnItemClickListener{ @Override public void onItemClick(AdapterView<?> arg0, V

    Android资料

    public class MainActivity extends ListActivity implements OnItemClickListener { // private ListView lv; private String[] numbers = {"1", "2", "3", "4", "5", "6" ,"7"};//①先定义一个数组 private ...

    FragmentView

    将fragment和listview结合使用 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment1, null); ...

    list嵌套list

    listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Intent intent = new Intent...

    android的ListView点击item使item展开的做法的实现代码

    list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { MyData data = myList.get(position); if (o

    谷歌天气并json解析xml

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String latAndLon = list.get(position).getLat()+","+list.get(position).getLon(); String args = ...

    开发多媒体播放器

    /* 使用自定义的FileListAdapter来将数据传入ListView */ fileListView.setAdapter(new FileListAdapter(this, items)); } /** * 打开媒体文件 * @param f */ private void openFile(String path) { ...

    package com.example.f1_telephone;

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { str=list.get(arg2).getNumber(); phoneIntent = new Intent("android.intent.action.CALL",Uri.parse("tel:" + str)); ...

    访微信语音聊天

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Log.e("MediaManager", mDatas.get(arg2).getFilePath() + "sssss"); if (mAnimView != null) { mAnimView....

    SelectAll全选

    // public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, // long arg3) { // // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤 // ViewHolder ...

    Android天气预报实验报告

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView localeCity = (TextView)view.findViewById(R.id.locateCityText); localeCity.setText("正在定位....

    安卓记事本

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub Cursor c = dbReader.query(TABLE_NAME, null, null, null, null, ...

Global site tag (gtag.js) - Google Analytics