Нажатие Button внутри CardView в списке RecyclerView

345
20 марта 2017, 08:01

У меня есть список RecyclerView который состоит из большого количества CardView которые заполняются динамически внутри CardView есть кнопка Button. по нажатию по CardView открывается детальная информация , а по нажатию на Button нужно поставить лайк этой записи не открывая детальную информацию. Проблема в том что по клику на Button открывается детальная информация как по нажатию на CardView.Button отрабатывает как положено только если нажать на копку и подержать палец на копке как бы лонг клик, но нужно что бы обычный клик.

CardView

`

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    card_view:cardCornerRadius="12dp"
    card_view:cardElevation="5dp"
    card_view:cardUseCompatPadding="true">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="4"
            android:orientation="vertical">
            <TextView
                android:id="@+id/postTitle"
                android:textSize="21sp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
            <TextView
                android:id="@+id/postBody"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="vertical">
            <TextView
                android:id="@+id/postUserName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
            <Button
                android:id="@+id/postLike"
                android:text="@string/like_post"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
</android.support.v7.widget.CardView>

`

RecyclerItemClickListener

`public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { public interface OnItemClickListener { void onItemClick(View view, int position); }

private OnItemClickListener mListener;
private GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
    mListener = listener;
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return true;
        }
    });
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
    View childView = view.findChildViewUnder(e.getX(), e.getY());
    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
        mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
    }
    return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}

}`

AdapterRecycler

`public class AdapterRecycler extends RecyclerView.Adapter { private List postsList = new ArrayList<>(); private Context context; private IContentProvider iContentProvider = IContentProvider.getInstance();

public void setPostList(List<Posts> postsList, Context context) {
    this.postsList.clear();
    this.postsList.addAll(postsList);
    this.context = context;
    notifyDataSetChanged();
}
public Posts getItem(int i) {
    return postsList.get(i);
}
@Override
public int getItemCount() {
    return postsList.size();
}
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_post, parent, false);
    ItemViewHolder itemViewHolder = new ItemViewHolder(v);
    return itemViewHolder;
}
@Override
public void onBindViewHolder(final ItemViewHolder holder, final int position) {
    final Posts posts = getItem(position);
    Users users = iContentProvider.getUserInfo(posts.getUserId());
    holder.postBody.setText(posts.getBody());
    holder.postUserName.setText(users.getUserName());
    holder.postTitle.setText(posts.getTitle());
    if (posts.getLike() == null) {
        holder.like.setEnabled(true);
        holder.like.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                iContentProvider.likePost(posts.getId());
            }
        });
    } else {
        holder.like.setEnabled(false);
    }
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}
public static class ItemViewHolder extends RecyclerView.ViewHolder {
    TextView postTitle;
    TextView postBody;
    TextView postUserName;
    Button like;
    ItemViewHolder(View itemView) {
        super(itemView);
        postBody = (TextView) itemView.findViewById(R.id.postBody);
        postUserName = (TextView) itemView.findViewById(R.id.postUserName);
        like = (Button) itemView.findViewById(R.id.postLike);
        postTitle = (TextView) itemView.findViewById(R.id.postTitle);
    }

}

}`

Answer 1

Сделайте элемент который состоит отдельно из CardView и поверх него отдельно кнопка, чтобы карточка не перехватывала нажатие кнопки.

Кнопка не должна быть внутри карточки.

Я так думаю )

READ ALSO
Импорт даных с SQLite таблицы

Импорт даных с SQLite таблицы

Пишу програму на JavaFX которая должна импортировать данные с SQLite таблицы и заносить их в TableView, на писал следующий код, но даные не импортруются

284
Нагрузка на LongPoll сервер VK API

Нагрузка на LongPoll сервер VK API

Здравствуйте,из-за большой нагрузки, пару-тройку сотен в минуту, (да-да, она действительно такая и даже больше, в зависимости от времени суток),...

338
Интерфейс CharSequence и его методы

Интерфейс CharSequence и его методы

Имеем interface CharSequenceДанный интерфейс содержит в себе следующие методы:

282