1. 程式人生 > >RecyclerView 多條目載入和字條目點選事件

RecyclerView 多條目載入和字條目點選事件

package com.example.day02.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.day02.R;
import com.example.day02.bean.NewsBean;
import com.facebook.drawee.view.SimpleDraweeView;
import com.stx.xhb.xbanner.XBanner;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
/**
*@date 建立時間:2018/8/3 0003
*@author 
*@Description  recyclerview的多條目介面卡
*@version
*/

public class MyAdapter02 extends RecyclerView.Adapter {
    private static final int ITEM_ONE = 1;
    private static final int ITEM_TWO = 2;
    private static final int ITEM_THREE = 3;
    private static final int ITEM_FOUR = 4;
    private Context context;
    private List<NewsBean.DataBean> list;
    private List<String> imageList;
    private List<String> titleList;
    private XBanner xBanner;
    private RecyclerView.ViewHolder viewHolder = null;


    public MyAdapter02(Context context, List<NewsBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType == ITEM_ONE) {
            View view = LayoutInflater.from(context).inflate(R.layout.one_layout, parent, false);
            viewHolder = new OneViewHolder(view);
        } else if (viewType == ITEM_TWO) {
            View view = LayoutInflater.from(context).inflate(R.layout.two_layout, parent, false);
            return viewHolder = new TwoViewHolder(view);
        } else if (viewType == ITEM_THREE) {
            View view = LayoutInflater.from(context).inflate(R.layout.three_layout, parent, false);
            return viewHolder = new ThreeViewHolder(view);
        } else if (viewType == ITEM_FOUR) {
            View view = LayoutInflater.from(context).inflate(R.layout.four_layout, parent, false);
            return viewHolder = new FourViewHolder(view);
        }
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
        /*viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                itemClickListener.onItemClickListener(viewHolder,position);
            }
        });*/
        imageList = new ArrayList<>();
        String s = list.get(0).getImages().split("\\|")[0];
        String s1 = list.get(0).getImages().split("\\|")[1];
        String s2 = list.get(0).getImages().split("\\|")[2];
        imageList.add(s);
        imageList.add(s1);
        imageList.add(s2);
        titleList=new ArrayList<>();
        titleList.add(list.get(position).getTitle()+"1");
        titleList.add(list.get(position).getTitle()+"2");
        titleList.add(list.get(position).getTitle()+"3");
        if (holder instanceof OneViewHolder) {
            ((OneViewHolder) holder).oneSimple1.setImageURI(list.get(position).getImages().split("\\|")[0]);
            ((OneViewHolder) holder).oneSimple2.setImageURI(list.get(position).getImages().split("\\|")[1]);
            ((OneViewHolder) holder).oneSimple3.setImageURI(list.get(position).getImages().split("\\|")[2]);

        } else if (holder instanceof TwoViewHolder) {
            xBanner = ((TwoViewHolder) holder).banner;
            xBanner.setData(imageList,titleList);
            xBanner.setmAdapter(new XBanner.XBannerAdapter() {
                @Override
                public void loadBanner(XBanner banner, View view, int position) {
                    Glide.with(context).load(imageList.get(position)).into((ImageView) view);
                }
            });
        } else if (holder instanceof ThreeViewHolder) {
            ((ThreeViewHolder) holder).threeSimple.setImageURI(list.get(position).getImages().split("\\|")[0]);
            ((ThreeViewHolder) holder).threeTitle.setText(list.get(position).getTitle());
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    itemClickListener.onItemClickListener(viewHolder,position,((ThreeViewHolder) holder).threeTitle);
                }
            });
        } else if (holder instanceof FourViewHolder) {
            ((FourViewHolder) holder).fourSimple.setImageURI(list.get(position).getImages().split("\\|")[0]);
            ((FourViewHolder) holder).fourSimple02.setImageURI(list.get(position).getImages().split("\\|")[1]);
            ((FourViewHolder) holder).fourTitle.setText(list.get(position).getTitle());
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    itemClickListener.onItemClickListener(viewHolder,position,((FourViewHolder) holder).fourTitle);
                }
            });
        }
    }

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

    @Override
    public int getItemViewType(int position) {
        if (position == 0) {
            return ITEM_ONE;
        } else if (position == 1) {
            return ITEM_TWO;
        } else if ((position + 2)%2 == 0) {
            return ITEM_THREE;
        } else if ((position + 2)%2 == 1) {
            return ITEM_FOUR;
        }
        return super.getItemViewType(position);
    }


    static class OneViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.one_simple1)
        SimpleDraweeView oneSimple1;
        @BindView(R.id.one_simple2)
        SimpleDraweeView oneSimple2;
        @BindView(R.id.one_simple3)
        SimpleDraweeView oneSimple3;

        OneViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }

    static class TwoViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.banner)
        XBanner banner;
        TwoViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }

    static class ThreeViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.three_simple)
        SimpleDraweeView threeSimple;
        @BindView(R.id.three_title)
        TextView threeTitle;

        ThreeViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }

    static class FourViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.four_simple)
        SimpleDraweeView fourSimple;
        @BindView(R.id.four_title)
        TextView fourTitle;
        @BindView(R.id.four_simple02)
        SimpleDraweeView fourSimple02;

        FourViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }
    private OnItemClickListener itemClickListener;

    public void setItemClickListener(OnItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    public interface OnItemClickListener{
        void onItemClickListener(RecyclerView.ViewHolder view, int postion, TextView textView);
    }

}

相關推薦

RecyclerView 條目載入條目事件

package com.example.day02.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.w

RecyclerView展示固定資料、上拉載入、下拉重新整理、事件、長按事件、刪除條目、重新整理條目、新增條目條目載入

1、依賴:    implementation 'com.android.support:recyclerview-v7:27.0.2' 2、activity_main、 <?xml version="1.0" encoding="utf-8"?> <Li

Android:處理ListView條目中的Button的事件條目事件衝突

一 . 此條方法比較笨.       給條目中的1號區域的Button設定完了點選事件後,再給條目中的2號區域再設定點選事件 二 . 這個方法就比較簡單.     1 . 在ItemView配置的xml檔案中的根節點新增屬性android:descendantFocus

RecyclerView使用詳解一代替ListView(事件,新增頭佈局,上拉重新整理下拉載入)

老規矩,先看效果; Recycler是android5.0版本中新新增的一個view; 使用之前必須新增依賴庫: dependencies { compile 'com.android.support:recyclerview-v7:23.0.+' } 這裡我就不

jquery父元素子元素事件傳遞問題_不可把父元素的事件傳遞給子元素_事件無限迴圈傳遞

前述:jquery中: 當一個元素的點選事件被觸發時,會自動將該事件向父級元素逐級專遞。 但是實際場景當中,我們可能會遇到需要在父級元素中定義點選事件,來觸發特定子元素的點選事件,我就遇到了這麼一個問題。  但是這麼做的後果,在jquery1.8.2版本及以後所有版本(截止目前最新版本為3.3),

[Swift通天遁地]一、超級工具-(1)動態標籤:給UILabel文字中的Flagurl新增事件

本文將演示動態標籤的使用,它允許使用者在標籤上進行互動操作。 點選【Podfile】,檢視安裝配置檔案。 1 platform :ios, '8.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://githu

Android recyclerView items的側滑刪除以及事件處理

最近專案中需要實現銀行卡側滑刪除以及選擇預設無法刪除的效果,需求效果圖如下: 其實就是一個自定義的列表實現,這裡我用的是recyclerView首先需要自定義DeleteBankRecyclerView繼承RecyclerView,需要注意的是item的點選和

android listview裡包含元件(checkbox)事件Item的事件衝突

在listview的item中包含有textview和checkBox。我們既想獲取listitem的點選事件,又想獲取listitem中textview的點選事件和listitem中checkBox的點選事件,那麼有沒有辦法實現呢?答案是肯定的,我們只需重新建立listview的介面卡繼承BaseAdpte

Android中RecyclerView的item中控制元件的事件新增刪除一行、上移下移一行的程式碼實現

Demo展示圖片 佈局程式碼 // (layout)activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an

android 百度地圖系列之新增覆蓋物覆蓋物的事件

之前講了百度地圖定位和地圖基本操作,這篇部落格講一下,怎麼去給地圖新增覆蓋物,並當點選覆蓋物的時候顯示詳細資訊。 要給地圖新增覆蓋物,首先需要覆蓋物的經緯度,如果還要實現點選事件,顯示詳細的資訊,還需要覆蓋物的描述資訊(如圖片,位置名稱等),所以先新建一個實體

android用webview載入H5頁面出現事件失效的問題解決

不論點選還是標籤連結都失效,反覆查閱,可能性方法試了又試最終解決。總結下:1.開啟js支援2.webview 設定WebChromeClient3.websetting和webviewclientimport android.os.Bundle; import androi

Listview裡包含元件(checkbox)事件Item的事件衝突

今天在寫了個小需求,ListView裡包含checkbox,點選ListView的item時要求將item的內容顯示在一個TextView中(TextView不包含在item中),並同時改變checkbox的checked狀態。 程式碼很簡單,只是一開始並沒有意識到List

UITapGestureRecognizerUIButton的事件衝突的解決辦法

問題描述:        檢視view上有一個UIButton例項btn,綁定了一個點選事件的響應方法buttonClicked:,由於某種需要(如點選空白區域收起鍵盤),為view添加了UITapGestureRecognizer手勢,關鍵程式碼如下: UITap

Recyclerview或Listview實時重新整理,item事件失效的解決方法

問題場景: 本人最近在做一個關於藍芽開發的Demo,在掃描藍芽裝置的時候會產生回撥,並會返回BluetoothDevice和rssi,這個rssi就是掃描到的這個裝置的訊號。 注意,這個回撥不是搜尋到1個裝置後就只回調一次這個裝置,而是隻要掃描到了就會回

Android自定義介面卡ListView的事件相結合的使用

下邊演示一個使用ListView和自定義介面卡的案例,點選ListView中的條目會出現一個對話方塊,進行成績的修改,修改之後會立即通知介面卡進行資料的重新載入,如下: (1)、用於顯示listView的佈局檔案: <LinearLayout xm

Toolbar動態設定menu選單,標題居中,menu返回鍵事件

最近用toolbar,感覺使用非常麻煩,標題不能居中,設定點選事件也很麻煩,就自己封裝了一個toolbar; 1.首先解決標題不能居中的問題; 1)自定義一個xml檔案取名為itoolbar <?xml version="1.0" encoding="utf-8"?

RecyclerView 條目載入 事件

compile 'com.android.support:recyclerview-v7:25.1.0' //////////////////////////////////////////////////////////////如果巢狀 ScrollowView 需要加上

recyclerview單擊事件條目事件

方法一:利用View.onClickListener及onLongClickListener 利用了java回撥機制,這裡我們依賴於子Item View的onClickListener及onLongClickListener。 首先對MyAdapter.java程式碼做出如下修改: ①新建兩個內部介面:

RecyclerView 條目 包括事件

 匯入依賴 compile 'com.android.support:recyclerview-v7:25.3.1' //效果 ////////////////主佈局檔案//////////////////// <android.support.constraint

RecyclerView的基本使用(優化圖片載入、設定條目間距、設定Adapter、設定事件等)

首先需要v7包 如果顯示的是圖片,可以用下面這個AutoLoadRecyclerView,他可以在快速滑動時停止載入,避免OOM和記憶體資源浪費 public class AutoLoadRecyclerView extends RecyclerView { p