Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 按钮不响应onListItemClick的listview项_Android_Listview_Android Arrayadapter_Custom Adapter - Fatal编程技术网

Android 按钮不响应onListItemClick的listview项

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"

我正在开发一个应用程序,其中列表项很复杂,有TextView和两个ImageButton。我环顾四周寻找解决方案,尝试了我所看到的一切,但仍然一无所获

该列表是I have Override onListItemClick上ListFragment的一部分

<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