與RecyclerView的日常

花椒CX發表於2018-06-28

1、item無法居中

View view = LayoutInflater.from(parent.getContext())
    .inflate(***,parent,false);
複製程式碼

解決方法如上,在adapter中,初始化佈局時,要引入parent,而不能像下面的操作:

View view = LayoutInflater.from(parent.getContext())
    .inflate(***,null);
複製程式碼

上述方式好像是隻引用了item的佈局,未能得到父佈局的屬性。

2、新增分割線 --- 只針對線性佈局

        //新增自定義分割線
        DividerItemDecoration divider = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);
        divider.setDrawable(ContextCompat.getDrawable(this,R.drawable.custom_divider));//可以用shape寫一個自定義的分割線,如果不設定,就使用預設的灰色
        recyclerView.addItemDecoration(divider);
複製程式碼

3、預設沒有觸控效果

這個很尷尬,觸控上去沒有listview那種背景變深的感覺,感覺不好(꒦_꒦)

  • 解決方法,在根部局中加入背景狀態,如果沒有定製的,則可以直接使用android預設的效果
    android:background="?attr/selectableItemBackground"
    android:clickable="true"
複製程式碼

這裡引用了android私有的background。

(更新)2018年6月29日15:57:43

  • 今天遇到坑了,按照上面的方法,寫了個selector,實現觸控後背景框變小的效果,但是怎麼嘗試都沒有效果,折騰了近兩個小時,最後才發現,不管你selector中press狀態的圖片怎麼設定,它都是按照normal的狀態自動填滿,所以在press狀態圖片沒有留空白透明邊框的情況下,是無法區分兩種效果的。

4、item點選事件新增

在adapter中通過介面方式,定義點選事件,然後在adapter中實現該事件。

    OnItemClickListener onItemClickListener;

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }
複製程式碼
    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.textView.setText(stringList.get(position));
        holder.rootLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onItemClickListener.onItemClick(v,position);
            }
        });
    }
複製程式碼

最後在外部響應:

        adapter.setOnItemClickListener(new Adapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
               //todo  
            }
        });
複製程式碼

RE

鴻神 blog.csdn.net/lmj62356579…

相關文章