2016-03-28 70 views
0

我使用回收视图,并且每行都有textview和image按钮。 在绑定我添加到图像按钮点击侦听器,但当我尝试点击图像按钮时,它点击行,只有当我长时间点击图像按钮时作出反应。将回收视图行中的点击侦听器添加到图像按钮

有什么建议吗?

@Override 
public void onBindViewHolder(final FolderViewHolder holder, final int position) { 

    if (isFolder(position)) { 
     holder.folderName.setText(folders.get(position)); 

    }else{ 

     ImageButton edit = (ImageButton) holder.view.findViewById(R.id.browser_bookmark_row_edit); 
     edit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       System.out.println(" ######### EDIT CLICKED"); 
       mListener.switchToEditBookmarkFragmentFolderAdapter(bookmarks.get(position - folders.size())); 
      } 
     }); 

     holder.folderName.setText(bookmarks.get(position - folders.size()).getTitle()); 
    } 

} 




public class FolderViewHolder extends RecyclerView.ViewHolder { 

    MuseoSansTextView folderName; 
    View view; 

    public FolderViewHolder(View itemView, MuseoSansTextView museoSansTextView) { 
     super(itemView); 

     view = itemView; 
     folderName = museoSansTextView; //(MuseoSansTextView) itemView.findViewById(R.id.browser_bookmark_folder_name); 

    } 

} 



<android.support.v7.widget.CardView 
android:id="@+id/card_view_contact" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:descendantFocusability="blocksDescendants" 
card_view:cardBackgroundColor="@color/transparent" 
card_view:cardCornerRadius="@dimen/card_corner_radius" 
card_view:cardUseCompatPadding="false" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:card_view="http://schemas.android.com/apk/res-auto"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="@dimen/activity_horizontal_margin"> 


     <com.osnewhorizon.pommmanager.ui.MuseoSansTextView 
      android:id="@+id/browser_bookmark_row_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentStart="true" 
      android:layout_toLeftOf="@+id/browser_bookmark_row_edit" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:singleLine="true" 
      android:textColor="@color/white" 
      android:text="test" 
      android:textSize="@dimen/contact_row_title_height" /> 

     <ImageButton 
      android:id="@+id/browser_bookmark_row_edit" 
      android:layout_width="30dp" 
      android:layout_height="30dp" 
      android:layout_centerVertical="true" 
      android:layout_alignParentEnd="true" 
      android:layout_marginRight="5dp" 
      android:src="@drawable/edit" 
      android:background="?android:attr/selectableItemBackground" 
      android:clickable="true"/> 


    </RelativeLayout> 
</android.support.v7.widget.CardView> 
+0

提供了FolderViewHolder类的实现。 – waleedsarwar86

+0

也提供了xml文件的行项目。 – waleedsarwar86

+0

添加了该行的xml – nahum

回答

0

好吧,发现问题。因为我的回收视图还在片段本身中触摸了侦听器,所以他捕获了单击事件。

0

我建议你应该在XML文件中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    ... 
    android:descendantFocusability="blocksDescendants"> 

    <Button 
    ... 
     /> 
</RelativeLayout> 

添加android:descendantFocusability="blocksDescendants"root view或者你可以使用ImageView而不是ImageButton

+0

我正在使用“blocksDescendants”并尝试ImageButton和ImageView没有成功 – nahum

0

你为什么要使用的ImageButton,使用ImageView的替代

+0

图像视图是一样的,不工作 – nahum

0

尝试增加机器人:可点击其中被膨胀为行你的XML布局=“真”

+0

要图像按钮? – nahum

+0

是的,到图像按钮。有时图像按钮点击事件可能会被recyclerview行项目单击事件覆盖。 – Thahaseen

+0

没有帮助,仍然没有工作 – nahum

0

请在构造函数like和 中找到imageButton xml视图设置您的ImageButton单击下面的FolderViewHolder构造函数中的侦听器。

public FolderViewHolder(View itemView) { 
     super(itemView); 
    imageButton=(ImageButton)itemView.findViewById(R.id.browser_bookmark_row_edit) 
    imageButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      System.out.println(" ######### EDIT CLICKED"); 
      mListener.switchToEditBookmarkFragmentFolderAdapter(bookmarks.get(getAdapterPosition()) - folders.size())); 
     } 
    }); 
} 
+0

你看到我添加点击监听器的洞itemView?和你的代码不工作 – nahum

+0

对不起,我的坏。 – waleedsarwar86

+0

可以提供行项目的xml文件内容。 – waleedsarwar86

3

首先,你创建了一个接口:

public interface OnItemClickListener{ 
     void onItemClick(View view, int position) 
} 

声明对全球:

private OnItemClickListener mOnItemClickListener; 

接下来,你需要像一个构造器:

public MyAdapter(Context context, List data, OnItemClickListener mOnItemClickListener){ 
    //... 
    this.mOnItemClickListener= mOnItemClickListener; 

} 

而且在onBindViewHolder

public class A extends AppCombatActivity implements MyAdapter.OnItemClickListener{ 
//exist code 
    @Override 
    onItemClick(View view, int position){ 
     // Do something with view + position 
    } 
// 


} 

诗:

@Override 
public void onBindViewHolder(final FolderViewHolder holder, final int position) { 
     //.... 
     holder.image.setOnClickListener(new View.OnItemClickListener){ 
      @Override 
      public void onClick(View v) { 
       mOnItemClickListener.onItemClick(v,position);  
      } 
     }); 
} 

最后,你可以在课堂上使用适配器一样实现回调函数的解决了这个,你可以捕捉事件的多子视图行:)

+0

感谢尝试帮助,我目前的实施onClick事件工作,但由于某种原因长时间点击。我认为它的一些元素是阻止imageButton监听器 – nahum

+0

如果你想处理事件长按一下,你可以捕获事件长按Click.setLongClickListener(...) –

+0

不,我的问题是我设置了常规的onClick,但它只会触发当我长时间按下图像,就像有些事情在图像前捕捉到事件 – nahum

0

RecyclerView.OnItemTouchListener,onSingleTapUp()返回true。它应该是false。因此点击事件将会在onBindViewHolder()的持有者视图中出现。

相关问题