我使用循环视图,每行都有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 :(得分: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
@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);
}
});
}
最后,您可以在类使用适配器中实现Callback,如:
public class A extends AppCombatActivity implements MyAdapter.OnItemClickListener{
//exist code
@Override
onItemClick(View view, int position){
// Do something with view + position
}
//
}
P.s:使用此解决方案,您可以在行中捕获多事件子视图:)
答案 1 :(得分:0)
我建议您将android:descendantFocusability="blocksDescendants"
添加到xml文件中的root view
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
android:descendantFocusability="blocksDescendants">
<Button
...
/>
</RelativeLayout>
或者您可以使用ImageView
代替ImageButton
。
答案 2 :(得分:0)
为什么使用imageButton,请改用imageView
答案 3 :(得分:0)
尝试在xml布局中添加 android:clickable =&#34; true&#34; ,这是一行充气。
答案 4 :(得分:0)
请在构造函数中找到imageButton xml视图和 在下面的FolderViewHolder构造函数中设置 ImageButton 单击侦听器。
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()));
}
});
}
答案 5 :(得分:0)
好的,发现了问题。因为我的循环视图还在片段本身中触摸了侦听器,所以他捕获了click事件。
答案 6 :(得分:0)
在RecyclerView.OnItemTouchListener
,onSingleTapUp()
返回true
。它应该是false
。因此,执行将在onBindViewHolder()
中的持有人视图中显示的单击事件。