第一行代码笔记 下拉刷新卡片现实上滑隐藏标题栏的demo

来源:互联网 发布:百度云域名查询 编辑:程序博客网 时间:2024/04/30 11:33

第一步:

在gradle中添加

   compile 'com.android.support:cardview-v7:23.0.0'//    图片加载库    compile 'com.github.bumptech.glide:glide:3.7.0'    compile 'com.android.support:recyclerview-v7:23.0.0'    compile 'com.android.support:design:23.2.0'
第二步:

创建一个实体类

public class TestData {    private String name;    private String  bit;    public TestData(String name, String bit) {        this.name = name;        this.bit = bit;    }    @Override    public String toString() {        return "TestData{" +                "name='" + name + '\'' +                ", bit='" + bit + '\'' +                '}';    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getBit() {        return bit;    }    public void setBit(String bit) {        this.bit = bit;    }}
第三步:

创建recycleview的子item的布局名为:card_layout

<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="200dp"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:layout_margin="6dp"    app:cardCornerRadius="10dp">   <LinearLayout       android:layout_width="match_parent"       android:layout_height="wrap_content"       android:orientation="vertical">       <!--scaleType时图片保存原有比例填充整个控件-->       <ImageView           android:id="@+id/metaril_image"           android:scaleType="centerCrop"           android:layout_gravity="center_horizontal"           android:layout_width="match_parent"           android:layout_height="120dp"           android:layout_marginTop="30dp"           />       <TextView           android:id="@+id/metaril_text"           android:layout_width="wrap_content"           android:layout_height="wrap_content"           android:layout_gravity="center_horizontal"           android:layout_margin="5dp"           android:textSize="16sp"/>   </LinearLayout></android.support.v7.widget.CardView>

第四步:

创建recycleview的adapter

public class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder> {    private Context context;    private List<TestData> dataList;    public TestAdapter(List<TestData> dataList) {        this.dataList = dataList;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        if ( null == context){            context = parent.getContext();        }        View  view = LayoutInflater.from(context).inflate(R.layout.card_layout,parent,false);        return new ViewHolder(view);    }    @Override    public void onBindViewHolder(ViewHolder holder, int position) {        TestData testData = dataList.get(position);        holder.textView.setText(testData.getName());//       Glide用法,先传入一个contenxt或者activity或者fragment然后load加载可以是图片url可以是本地路径,可以释怀资源id//        最后通过into将要付值的控件加入就可以了,用glide做好了内存溢出的处理。        Glide.with(context).load(testData.getBit()).into(holder.imageView);    }    @Override    public int getItemCount() {        return dataList.size();    }    class ViewHolder extends RecyclerView.ViewHolder{        CardView cardView;        ImageView imageView;        TextView textView;        public ViewHolder(View itemView) {            super(itemView);            cardView = (CardView) itemView;            imageView = (ImageView) itemView.findViewById(R.id.metaril_image);            textView = (TextView) itemView.findViewById(R.id.metaril_text);        }    }}
第五步,创建activity

/** * 悬浮按钮和可交互提示,下拉刷新,上滑隐藏标题栏,下滑出现标题栏,Snackbar使用 */public class MateriSumActivity extends AppCompatActivity implements View.OnClickListener {    private FloatingActionButton fab;    private RecyclerView recyclerview;    private List<TestData> dataList = new ArrayList<>();    private TestAdapter testAdapter;    private SwipeRefreshLayout refresh;    private Toolbar toolbar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_materi_sum);        initDatas();        initView();    }    private void initView() {//        FloatingActionButton和普通的button用法相同        fab = ((FloatingActionButton) findViewById(R.id.fab));        fab.setOnClickListener(this);//        添加toolbar        toolbar = ((Toolbar) findViewById(R.id.metaril_toolbar));        setSupportActionBar(toolbar);        recyclerview = ((RecyclerView) findViewById(R.id.materil_recycle));        LinearLayoutManager manager = new  LinearLayoutManager(this);//        GridLayoutManager manager = new GridLayoutManager(this,2);        recyclerview.setLayoutManager(manager);        testAdapter = new TestAdapter(dataList);        recyclerview.setAdapter(testAdapter);        refresh = ((SwipeRefreshLayout) findViewById(R.id.refresh));//        这里设置这个刷新提示的颜色。        refresh.setColorSchemeResources(R.color.colorPrimary);        refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {            @Override            public void onRefresh() {//                去网络请求最新数据。                refreshData();            }        });    }    private void refreshData(){        new Thread(new Runnable() {            @Override            public void run() {                try {                    Thread.sleep(3000);                } catch (InterruptedException e) {                    e.printStackTrace();                }//                此处上面开了子线程,但只能在主线程更新UI所以这里回到主线程                runOnUiThread(new Runnable() {                    @Override                    public void run() {//                        更新数据源,然后在这里刷新数据                        initDatas();                        testAdapter.notifyDataSetChanged();//                        让刷新提示消失                        refresh.setRefreshing(false);                    }                });            }        }).start();    }    private void initDatas() {        TestData testData = new TestData("童话镇", "http://a.hiphotos.baidu.com/image/pic/item/562c11dfa9ec8a1333d2bafff503918fa1ecc0e1.jpg");        dataList.add(testData);        TestData testData1 = new TestData("灰姑娘", "http://a.hiphotos.baidu.com/image/pic/item/37d12f2eb9389b50572ebf5b8735e5dde6116ee1.jpg");        dataList.add(testData1);        TestData testData2 = new TestData("白雪公主", "http://d.hiphotos.baidu.com/image/pic/item/b58f8c5494eef01f11c545cce2fe9925bd317de1.jpg");        dataList.add(testData2);        TestData testData3 = new TestData("美人鱼", "http://a.hiphotos.baidu.com/image/pic/item/7aec54e736d12f2ea1d5f3694dc2d562843568e2.jpg");        dataList.add(testData3);        TestData testData4 = new TestData("彼得潘", "http://a.hiphotos.baidu.com/image/pic/item/08f790529822720e5c3f3afa79cb0a46f21fab39.jpg");        dataList.add(testData4);        TestData testData5 = new TestData("红房子", "http://c.hiphotos.baidu.com/image/pic/item/3812b31bb051f819cc8c8ae5dfb44aed2f73e7f0.jpg");        dataList.add(testData5);        TestData testData6 = new TestData("杰克", "http://d.hiphotos.baidu.com/image/pic/item/023b5bb5c9ea15cef55c4609b4003af33a87b204.jpg");        dataList.add(testData6);        TestData testData7 = new TestData("糖果屋", "http://f.hiphotos.baidu.com/image/pic/item/00e93901213fb80e0ee553d034d12f2eb9389484.jpg");        dataList.add(testData7);        TestData testData8 = new TestData("心爱的玻璃鞋", "http://g.hiphotos.baidu.com/image/pic/item/faf2b2119313b07e5c56ab0e0ed7912396dd8cc9.jpg");        dataList.add(testData8);        TestData testData9 = new TestData("睿智的河水", "http://c.hiphotos.baidu.com/image/pic/item/6f061d950a7b02084993e1d567d9f2d3572cc8a8.jpg");        dataList.add(testData9);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.fab:                Toast.makeText(this, "这个浮这的按钮被电击了", Toast.LENGTH_SHORT).show();                useSnackBar(v);                break;        }    }    /**     * SnackBar使用和toast使用类似,只是可以添加点击,需要传入一个view,可以是当前界面任意view     * 他会自动去寻找这个view的最外层布局,用于展示自己。参数2:显示的内容,参数3:是snackbar显示的时常     * setAction添加一个点击事件     *     * @param view     */    private void useSnackBar(View view) {        Snackbar.make(view, "删除数据", Snackbar.LENGTH_LONG).setAction("undo", new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(getApplicationContext(), "这个Snackbar按钮被电击了", Toast.LENGTH_SHORT).show();            }        }).show();    }}

activity的布局文件

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:id="@+id/activity_materi_sum"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#80aca9">    <!--CoordinatorLayout布局是加强班的framlayout可以监听所有子控件的各种事件,然后自动帮助我们自己做出最为合理的响应-->    <!--例如弹出的snackbar遮挡住了fab,但用了CoordinatorLayout后snackbar弹出时,fab会上移。不遮盖住-->    <!--注意CoordinatorLayout只监听它的子控件,snackbar因为传入的view为fab的view所以也算CoordinatorLayout的子控件(activity中)-->    <android.support.design.widget.CoordinatorLayout        android:layout_width="match_parent"        android:layout_height="match_parent">        <!--AppBarLayout是一个垂直的linerlayout里面做了很多滚动事件的封装-->        <!--添加了AppBarLayout后,只要在Toolbar加入layout_scrollFlags如下-->        <!--就可以实现上滑隐藏标题栏,下拉又显示出来-->        <android.support.design.widget.AppBarLayout            android:layout_width="match_parent"            android:layout_height="wrap_content">            <android.support.v7.widget.Toolbar                android:id="@+id/metaril_toolbar"                android:layout_width="match_parent"                android:layout_height="?attr/actionBarSize"                android:background="?attr/colorPrimary"                app:layout_scrollFlags="scroll|enterAlways|snap"                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"                app:theme="@style/Base.ThemeOverlay.AppCompat.ActionBar" />        </android.support.design.widget.AppBarLayout>        <!--指定一个行为layout_behavior同时添加上面AppBarLayout可以避免RecyclerView遮盖住Toolbar-->        <!--SwipeRefreshLayout实现下拉刷新,因为现在最外层是SwipeRefreshLayout了,所以layout_behavior改添加到swip上-->        <android.support.v4.widget.SwipeRefreshLayout            android:layout_width="match_parent"            android:id="@+id/refresh"            android:layout_height="match_parent"            app:layout_behavior="@string/appbar_scrolling_view_behavior"            >            <android.support.v7.widget.RecyclerView                android:id="@+id/materil_recycle"                android:layout_width="match_parent"                android:layout_height="match_parent"               />        </android.support.v4.widget.SwipeRefreshLayout>        <android.support.design.widget.FloatingActionButton            android:id="@+id/fab"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="bottom|end"            android:layout_margin="16dp"            android:src="@mipmap/rn11"            app:elevation="10dp" />    </android.support.design.widget.CoordinatorLayout></RelativeLayout>






































0 0