Android 按钮不响应onListItemClick的listview项
我正在开发一个应用程序,其中列表项很复杂,有TextView和两个ImageButton。我环顾四周寻找解决方案,尝试了我所看到的一切,但仍然一无所获 该列表是I have Override onListItemClick上ListFragment的一部分Android 按钮不响应onListItemClick的listview项,android,listview,android-arrayadapter,custom-adapter,Android,Listview,Android Arrayadapter,Custom Adapter,我正在开发一个应用程序,其中列表项很复杂,有TextView和两个ImageButton。我环顾四周寻找解决方案,尝试了我所看到的一切,但仍然一无所获 该列表是I have Override onListItemClick上ListFragment的一部分 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF" >
<TextView
android:id="@+id/medcine_info_txt"
android:layout_width="fill_parent"
android:layout_height="200dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:padding="3dp"
android:textColor="@color/black" />
<ImageButton
android:id="@+id/item_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/medcine_info_txt"
android:layout_alignParentLeft="true"
android:contentDescription="@string/item_edit"
android:focusable="false"
android:focusableInTouchMode="false"
android:src="@android:drawable/ic_menu_edit" />
<ImageButton
android:id="@+id/item_history"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/medcine_info_txt"
android:layout_centerHorizontal="true"
android:contentDescription="@string/item_history"
android:focusable="false"
android:focusableInTouchMode="false"
android:src="@android:drawable/btn_star" />
</RelativeLayout>
关于onListItemClick为什么不处理单击的想法?使ListFragment实现
视图。OnClickListener
界面,并实现在方法OnClick(视图)
中按下按钮时要调用的代码,它是@Override使ListFragment实现视图。OnClickListener
界面,并实现在方法OnClick(视图)
中按下按钮时要调用的代码,它是@Override使ListFragment实现视图。OnClickListener
界面,并实现在方法OnClick(View View)
中按下按钮时要调用的代码,即@Override使ListFragment实现View.OnClickListener
界面,并实现在方法OnClick(View)
中按下按钮时要调用的代码,它是@Override您可以创建View.OnClickListner对象,该对象可以侦听图像按钮在getView中单击。onListItemClick通常用于处理行单击事件,而不是行中的项目
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflator = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View listItem = inflator.inflate(R.layout.medcince_list_item, null);
ImageButton mEdit = (ImageButton)listItem.findViewById(R.id.item_edit);
mEdit.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// HERE YOU CAN HANDLE BUTTON CLICK. POSITION YOU CAN HAVE FROM getView already.
}
});
mEdit.setTag(getItem(position));
ImageButton mHistory = (ImageButton)listItem.findViewById(R.id.item_history);
mHistory.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// HERE YOU CAN HANDLE BUTTON CLICK. POSITION YOU CAN HAVE FROM getView already.
}
});
mHistory.setTag(getItem(position));
return listItem;
}
您可以创建View.OnClickListner对象,该对象可以在getView中侦听imagebutton单击。onListItemClick通常用于处理行单击事件,而不是行中的项目
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflator = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View listItem = inflator.inflate(R.layout.medcince_list_item, null);
ImageButton mEdit = (ImageButton)listItem.findViewById(R.id.item_edit);
mEdit.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// HERE YOU CAN HANDLE BUTTON CLICK. POSITION YOU CAN HAVE FROM getView already.
}
});
mEdit.setTag(getItem(position));
ImageButton mHistory = (ImageButton)listItem.findViewById(R.id.item_history);
mHistory.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// HERE YOU CAN HANDLE BUTTON CLICK. POSITION YOU CAN HAVE FROM getView already.
}
});
mHistory.setTag(getItem(position));
return listItem;
}
您可以创建View.OnClickListner对象,该对象可以在getView中侦听imagebutton单击。onListItemClick通常用于处理行单击事件,而不是行中的项目
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflator = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View listItem = inflator.inflate(R.layout.medcince_list_item, null);
ImageButton mEdit = (ImageButton)listItem.findViewById(R.id.item_edit);
mEdit.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// HERE YOU CAN HANDLE BUTTON CLICK. POSITION YOU CAN HAVE FROM getView already.
}
});
mEdit.setTag(getItem(position));
ImageButton mHistory = (ImageButton)listItem.findViewById(R.id.item_history);
mHistory.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// HERE YOU CAN HANDLE BUTTON CLICK. POSITION YOU CAN HAVE FROM getView already.
}
});
mHistory.setTag(getItem(position));
return listItem;
}
您可以创建View.OnClickListner对象,该对象可以在getView中侦听imagebutton单击。onListItemClick通常用于处理行单击事件,而不是行中的项目
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflator = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View listItem = inflator.inflate(R.layout.medcince_list_item, null);
ImageButton mEdit = (ImageButton)listItem.findViewById(R.id.item_edit);
mEdit.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// HERE YOU CAN HANDLE BUTTON CLICK. POSITION YOU CAN HAVE FROM getView already.
}
});
mEdit.setTag(getItem(position));
ImageButton mHistory = (ImageButton)listItem.findViewById(R.id.item_history);
mHistory.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// HERE YOU CAN HANDLE BUTTON CLICK. POSITION YOU CAN HAVE FROM getView already.
}
});
mHistory.setTag(getItem(position));
return listItem;
}
我认为你的ImageButton偷走了McClickLister事件。将此属性添加到布局中 android:genderantfocusability=“blocksDescendants”
我认为你的ImageButton偷走了McClickLister事件。将此属性添加到布局中
android:genderantfocusability=“blocksDescendants”
我认为你的ImageButton偷走了McClickLister事件。将此属性添加到布局中
android:genderantfocusability=“blocksDescendants”
我认为你的ImageButton偷走了McClickLister事件。将此属性添加到布局中
android:genderantfocusability=“blocksDescendants”
这是列表视图
的常见问题。我读过关于这个的源代码。
问题:为什么不调用onListItemClick
?
回答:
AbsListView
类重写方法
- Snip代码来自方法。
如果是子项,则将调用PerformClick。()返回false哪个子项是您的ListView项视图李>
- Snip代码来自
hasFocusable
方法
@凌驾
公共布尔hasFocusable(){
如果((mViewFlags&VISIBILITY_MASK)!=VISIBLE){return false;}
if(isFocusable()){return true;}
final int-genderantfocusability=getgenderantfocusability();
if(子体聚焦!=聚焦\块\子体){
最终整数计数=McChildrenCount;
最终视图[]儿童=儿童;
对于(int i=0;i
所以解决方案:
解决方案A,设置ListView项DegenantFocusability属性,使其GetDegenantFocusability
()不等于FOCUS\u BLOCK\u子体
解决方案B,ListView项所有子视图都不是hasFocusable(hasFocusable()
返回false)。这是ListView的常见问题。我阅读了有关此问题的源代码。
问题:为什么不调用onListItemClick
?
回答:
AbsListView
类重写方法
- Snip代码来自方法。
如果是子项,则将调用PerformClick。()返回false哪个子项是您的ListView项视图
- Snip代码来自
hasFocusable
方法
@凌驾
公共布尔hasFocusable(){
如果((mViewFlags&VISIBILITY_MASK)!=VISIBLE){return false;}
if(isFocusable()){return true;}
final int-genderantfocusability=getgenderantfocusability();
if(子体聚焦!=聚焦\块\子体){
最终整数计数=McChildrenCount;
最终视图[]儿童=儿童;
对于(int i=0;i
所以解决方案:
解决方案A,设置ListView项DegenantFocusability属性,使其GetDegenantFocusability
()不等于FOCUS\u BLOCK\u子体
解决方案B,ListView项所有子视图都不是hasFocusable(hasFocusable()
返回false)。这是ListView的常见问题。我阅读了有关此问题的源代码。
问题:为什么不调用onListItemClick
?
回答:
AbsListView
类重写方法
- Snip代码来自方法。
如果是子项,则将调用PerformClick。()返回false哪个子项是您的ListView项视图
- Snip代码来自
hasFocusable
方法
@凌驾
公共布尔hasFocusable(){
如果((mViewFlags&VISIBILITY_MASK)!=VISIBLE){return false;}
if(isFocusable()){return true;}
final int-genderantfocusability=getgenderantfocusability();
if(子体聚焦!=聚焦\块\子体){
最终整数计数=McChildrenCount;
最终视图[]儿童=儿童;
对于(int i=0;i
所以解决方案:
解决方案A,设置ListView项
@Override
public boolean hasFocusable() {
if ((mViewFlags & VISIBILITY_MASK) != VISIBLE) {return false; }
if (isFocusable()) {return true;}
final int descendantFocusability = getDescendantFocusability();
if (descendantFocusability != FOCUS_BLOCK_DESCENDANTS) {
final int count = mChildrenCount;
final View[] children = mChildren;
for (int i = 0; i