RecyclerViewはSwipeRefreshLayoutとBaseQuickAdapter万能アダプタを組み合わせて、ドロップダウン・リフレッシュとアップロードをより多く実現

7464 ワード

最初のステップjarパッケージのインポート
appディレクトリの下にあるbuild.gradleファイルに追加
    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.22'
    implementation 'com.android.support:recyclerview-v7:27.1.1'

プロジェクトディレクトリの下にあるbuild.gradleファイルに追加
buildscript {
    repositories {
        jcenter()
        mavenCentral()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'

    }
}


allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
        google()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

これでプロジェクトにRecyclerviewと万能アダプタBaseQuickAdapterを使用できるようになりました
2つ目はもちろん新しいレイアウトをRecyclerviewに追加しました.ここではGoogle公式のドロップダウンリフレッシュコントロールSwipeRefreshLayoutに参加しました.
    
        
        
    

初期化コントロール各種属性の設定

    /**
     *    View  
     */
    private void initView() {
        refreshLayout=findViewById(R.id.swipe_refresh);
        recyclerView=findViewById(R.id.recycler_view);
        LinearLayoutManager layoutManager=new LinearLayoutManager(MainActivity.this);//   listview   recyclerview
        recyclerView.setLayoutManager(layoutManager);//       ,          
        refreshLayout.setColorSchemeResources(R.color.colorAccent);//       SwipeRefreshLayout     
    }
}

データ・ソースの初期化に必要な万能アダプタの設定
アダプタの作成新しいクラス継承とBaseQuickAdapterの最初のパラメータは現在のデータソースタイプで、2番目のパラメータは次の内部クラス継承とBaseViewHodlerです.

public class MainActivityAdapter extends BaseQuickAdapter {

    /**
     *
     * @param layoutResId  recyclerview item  
     * @param data        
     */
    public MainActivityAdapter(int layoutResId, @Nullable List data) {
        super(layoutResId, data);
    }

    /**
     *                 onBindViewHolder  
     * @param helper
     * @param item
     */
    @Override
    protected void convert(MyViewHodler helper, MainEntity item) {
        //                         ,   activity         
        helper.setText(R.id.text_content,item.getNaem()).addOnClickListener(R.id.text_content);

    }

    class MyViewHodler extends BaseViewHolder{
        private TextView text_content;
        public MyViewHodler(View view) {
            super(view);
            text_content=view.findViewById(R.id.text_content);
        }
    }
}

 
  /**
     *             
     */
    private void initData() {
        adapterListDate=new ArrayList<>();
        adapter=new MainActivityAdapter(R.layout.activity_main_item,adapterListDate);
        recyclerView.setAdapter(adapter);
}

ヘッダーの追加やデータの設定など、リストを追加してアニメーションを表示したり、item全体のクリックイベントやコントロールのクリックイベントを追加したりする機能
      View view= LayoutInflater.from(MainActivity.this)
                 .inflate(R.layout.headview_layout,null);
      adapter.addHeaderView(view);//         ,      ,                   ,   
//    adapter.addFooterView();              


      //    (       )
      adapter.openLoadAnimation();
    
//             
//    adapter.openLoadAnimation(BaseQuickAdapter.ALPHAIN);

//    public static final int ALPHAIN = 0x00000001;

//    public static final int SCALEIN = 0x00000002;

//    public static final int SLIDEIN_BOTTOM = 0x00000003;

//    public static final int SLIDEIN_LEFT = 0x00000004;

//    public static final int SLIDEIN_RIGHT = 0x00000005; 

      //        
      recyclerView.postDelayed(new Runnable() {
            @Override
            public void run() {
                //                    ,       
                refreshLayout.setRefreshing(true);
                //        
                page=1;//page    
                loadDate(page);
            }
        }, 2000);
        //       SwipeRefreshLayout       
        refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                isLoadMore = false;
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //        
                        page=1;
                        loadDate(page);
                    }
                }, 2000);
            }
        });
        adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
            @Override
            public void onLoadMoreRequested() {
                //                           
                isLoadMore = true;
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //        
                        page++;
                        loadDate(page);
                    }
                }, 2000);
            }
        }, recyclerView);

        adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                //     item     ,            
                Toast.makeText(MainActivity.this,"   "+page+"   " + position + "  ",Toast.LENGTH_SHORT).show();
            }
        });
        adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                //                ,    
                 Toast.makeText(MainActivity.this,"     "+page+"   " + position + "  ",Toast.LENGTH_SHORT).show();
            }
        });

次に、ネットワークリクエストのロードデータをシミュレートします.
 /**
     *                 
     */
    private void loadDate(int page) {
        if (refreshLayout.isRefreshing()) {
            refreshLayout.setRefreshing(false);
        }
        List date=new ArrayList<>();
        //isLoadMore                   
        if (isLoadMore) {
            for (int i = 0; i <= 15; i++) {
                date.add("   "+page+"   " + i + " ");
            }
            adapterListDate.addAll(date);
            adapter.notifyDataSetChanged();
            //                  ,          
            adapter.loadMoreComplete();//      ,                
        }else{
            adapterListDate.clear();
            for (int i = 0; i <= 15; i++) {
                date.add("   "+page+"   " + i + " ");
            }
            adapterListDate.addAll(date);
            adapter.notifyDataSetChanged();
            adapter.loadMoreComplete();
        }
    }

よし、このような頭があって、尾があって、ドロップダウンがあって更新して、上に引っ張ってもっと多くのrecyclerviewをロードして完成して、簡単でしょう!機能がたくさんあるので、時間があればまた探索しましょう!
見出し
デモを送る
https://download.csdn.net/download/chengxuyuanchaochao/10545453