Android之Material Design之可刷新的滑动列表(RecyclerView)

Material Design控件的简单介绍:

  • Toolbar — 加强版ActionBar,用setSupportActionBar()方法将Toolbar实例传入 (app:showAsAction-用来指定按钮的显示位置)。
  • DrawerLayout — 用于滑动菜单。
  • FloatingActionButton — 悬浮按钮。
  • Snackbar — 可交互式提示。
  • CoordinatorLayout — 加强版FramLayout,可监听其所有子控件的事件,然后自动帮我们做出合理的响应,用于Toolbar。
  • AppBarLayout — 一个垂直方向的LinearLayout,内部做了滚动事件的封装。必须是CoordinatorLayout的子布局。
  • CollapsingToolbarLayout — 用于可折叠式标题栏,只能作为AppBarLayout的直接子布局来使用。
  • NestedScrollView — ScrollView加强版-允许使用滚动方式查看屏幕以外的数据,NestedScrollView增加了嵌套响应滚动事件功能。
  • CardView — 可和RecyclerView配合实现卡片式布局。
  • SwipeRefreshLayout — 用于下拉刷新。

~其中有一个名为Demo的bean类就不贴出来了,都是set/get函数~

 

主布局文件activity_list.xml(xmlns:app可用于兼容5.0以下系统):




    

        

            

            



        
    

    

    

 

Toolbar下内容布局文件content_list.xml:






        


        


 

用于RecyclerView的CardView布局文件item_list.xml:

Android之Material Design之可刷新的滑动列表(RecyclerView)_第1张图片

 





    

        

        

            

            
        

        

            

        

        

            

 

代码文件MainActivity:

 

public class MainActivity extends AppCompatActivity {

    private MyAdapter adapter;
    private SwipeRefreshLayout swipeRefreshLayout;
    private List demoList = new ArrayList<>();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        
        //获取Toolbar布局
        Toolbar toolbar = findViewById(R.id.toolbar);
        //方法将Toolbar实例传入
        setSupportActionBar(toolbar);
        //添加系统返回按钮在toolbar
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

        initFloatBtn();
        
        initData();
        initRecyclerView();
        initSwipeRefreshLayout();
        
    }

    private void initFloatBtn() {
        //悬浮按钮
        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    //                悬浮按钮点击事件

            }
        }); 

    }

    private void initData() {
        demoList.clear();
        //读取本地数据库litePal数据库
        List demos = DataSupport.findAll(Demo.class);
        demoList.addAll(demos);
    
    }

    private void initRecyclerView(){
        RecyclerView recyclerView = findViewById(R.id.recycler);
        GridLayoutManager layoutManager = new GridLayoutManager(this,1);
        recyclerView.setLayoutManager(layoutManager);
        adapter = new MeetingAdapter(demoList);
        recyclerView.setAdapter(adapter);
        recyclerView.setNestedScrollingEnabled(false);//解决滑动列表卡顿问题
    }

    private void initSwipeRefreshLayout(){
        swipeRefreshLayout = findViewById(R.id.swiperefresh);
        swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE);
        //设置下拉刷新进度条的颜色
        swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            //进行刷新数据操作
            initData();
            adapter.notifyDataSetChanged();
            swipeRefreshLayout.setRefreshing(false);
            }
        });
    }


代码文件MyAdapter:

public class MyAdapter extends RecyclerView.Adapter {

    private Context context;
    private List demoList;
        //利用结构函数传入数据
    public MyAdapter(List demoList) {
        
        this.demoList = demoList;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //获取context
        if (context == null) {
            context = parent.getContext();
        }
        //绑定RecyclerView的子布局即item_list.xml
        View view = LayoutInflater.from(context).inflate(R.layout.item_list,parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        //根据position获取相应的数据
        final Demo demo = demoList.get(position);
        //给RecyclerView子布局中的控件设定相应的数据
        holder.textBookName.setText(demo.getBookName());
        holder.textAuthor.setText(demo.getAuthor());
        holder.textPress.setText(demo.getPress());
        holder.textType.setText(demo.getType());
       
        //购买按钮点击事件
        holder.btnBuy.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
              

            }
        });
        //收藏按钮点击事件
        holder.btnCollect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
            }
        });

        //试读按钮点击事件
        holder.btnTry.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                

            }
        });

        
    }

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


    static class ViewHolder extends RecyclerView.ViewHolder {
        CardView cardView;
        TextView textBookName;
        TextView textAuthor;
        TextView textPress;
        TextView textType;
        
        Button btnBuy;
        Button btnCollect;
        Button btnTry;

        ViewHolder(View itemView) {
            super(itemView);
            cardView = (CardView) itemView;
            textBookName = itemView.findViewById(R.id.text_bookName);
            textAuthor = itemView.findViewById(R.id.text_author);
            textPress = itemView.findViewById(R.id.text_press);
            textType = itemView.findViewById(R.id.text_type);
            
            btnBuy = itemView.findViewById(R.id.btn_buy);
            btnCollect = itemView.findViewById(R.id.btn_collect);
            btnTry = itemView.findViewById(R.id.btn_try);

        }

    }

}

 

 

你可能感兴趣的:(android,开发笔记)