recyclerview线性布局只响应其中一半的响应,但滚动后它工作正常

时间:2017-12-03 19:56:06

标签: android android-recyclerview recycler-adapter

我有一个recyclerview,每行由线性布局和简单的textview组成。

在线性布局(父级)中,我使用OnItemClickListener放置了一个接口。它的工作正常但是......

该行只能在文本视图所在的区域单击。但是,线性布局的其余区域不可单击。所以当我点击该行的空白区域时,没有任何反应。但是当我向下滚动列表时,对于下面的项目,它确实可以正常工作。

我希望它清楚。为什么会这样。

这是我的适配器:

    public class SearchAdapter extends RecyclerView.Adapter<SearchItemViewHolder> {

    private ArrayList<String> searchArrayList;
    private Context context;

    private OnItemClickListener mOnItemClickListener;

    public interface OnItemClickListener {
         void onItemClick(String itemName);
    }


    public SearchAdapter(ArrayList<String> searchArrayList, Context context, OnItemClickListener onItemClickListener) {
        this.searchArrayList = searchArrayList;
        this.context = context;
        mOnItemClickListener = onItemClickListener;
    }

    @Override
    public SearchItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.food_list_item_search_view, parent, false);

        return new SearchItemViewHolder(itemView);

    }

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


        final String currentItem = searchArrayList.get(position);

        holder.itemTextView.setText(currentItem);

        holder.searchItemLinearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mOnItemClickListener.onItemClick(currentItem);
            }
        });




//        holder.setImage(holder.itemTextView.getContext(), holder.countryFlagImageView, currentCountry.getFlag());

    }

//    @Override
//    public void onViewRecycled(SearchItemViewHolder holder) {
//        super.onViewRecycled(holder);
//        holder.imageLoadTask.cancel(true);
//    }

    @Override
    public int getItemCount() {
        return searchArrayList.size();
    }





}

以下是我的观看者:

    public class SearchItemViewHolder extends RecyclerView.ViewHolder {


    TextView itemTextView;
    LinearLayout searchItemLinearLayout;


//    public LoadImage imageLoadTask;


    public SearchItemViewHolder(View itemView) {
        super(itemView);


        itemTextView = (TextView)itemView.findViewById(R.id.search_item_text_view);
        searchItemLinearLayout = (LinearLayout)itemView.findViewById(R.id.search_item_linearlayout);

    }

//    public void setImage(Context context, ImageView imageView, int resource){
//        imageLoadTask = new LoadImage(context, imageView, resource);
//        imageLoadTask.execute();
//    }



}

这是我的xml:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:id="@+id/search_item_linearlayout"
    android:layout_height="60dp"
    android:background="?android:attr/selectableItemBackground"


    >




       <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Food item"
        android:textSize="20sp"
        android:gravity="center_vertical"
        android:id="@+id/search_item_text_view"
        android:padding="10dp"
        android:textColor="@color/colorPrimary"
        />


</LinearLayout>

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为我使用了线性布局和水平的orietaion。当我将其更改为相对布局时,它工作正常。

答案 1 :(得分:0)

让您的父布局可点击

android:clickable="true"

ViewGroup默认情况下不可点击。