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 实现列表条目功能,以及 ...
在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布局和自定义adapter了,一般是继承于BaseAdapter,示例代码见下方。写ListView的点击...
那你现在肯定已经在listview 的item里面放了两个控件吧,假如是textview吧,那你就首先要给listview添加一个OnItemClickListener来监听你点击了那个item,在这个OnItemClickListener里面有个onItemClick方法,...
在使用listview的时候,我们经常会在listview的监听事件中,例如OnItemClickListener(onItemClick)中,或listview的adapter中(getView、getItem、getItemId等)看到position这个变量。在我们没有为listview添加...
onItemClick(AdapterView<?> parent, View view, int position, long id) parent:官方解释为:The AdapterView where the click happened,也就是用户所点击的AdapterView,这个参数一般不用。 view:当前...
主要介绍了Android 中ListView setOnItemClickListener点击无效原因分析的相关资料,需要的朋友可以参考下
资源共享是每个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的点击变色的实例 我做了一个音乐播放器,其中用... private class ListViewClickListener implements OnItemClickListener{ @Override public void onItemClick(AdapterView<?> arg0, V
public class MainActivity extends ListActivity implements OnItemClickListener { // private ListView lv; private String[] numbers = {"1", "2", "3", "4", "5", "6" ,"7"};//①先定义一个数组 private ...
将fragment和listview结合使用 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment1, null); ...
listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Intent intent = new Intent...
list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { MyData data = myList.get(position); if (o
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) { ...
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....
// public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, // long arg3) { // // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤 // ViewHolder ...
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, ...