RecyclerView实现多种布局与OkHttp结合获取数据

来源:互联网 发布:极点五笔 mac 编辑:程序博客网 时间:2024/06/05 22:39
RecyclerView布局是一个高解耦的控件,看起来非常麻烦其实可以通过它实现很多的效果包括我们之前钟爱的listview girdview,还能够实现瀑布流的效果

配置我们的包
app的build中依赖(有26+的需要删除)
compile 'com.android.support:mediarouter-v7:25.0.0'
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'

如果出现版本号错误 粘贴此代码 在app build 中 android 和 dependencies中间
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!
requested.name 

.startsWith("multidex")) {
                details.useVersion '24.1.0'
            }
        }
    }
}

配置好之后就可以进行我们的代码了

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

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public classHomeActivity extendsActionBarActivity{

    private RecyclerView mRecyclerView;
    private List<String> mDatas;
    private HomeAdapter mAdapter;

    @Override
    protected voidonCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_single_recyclerview);

        initData();
        mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.setAdapter(mAdapter = new HomeAdapter());

    }

    protected voidinitData()
    {
        mDatas = new ArrayList<String>();
        for (int i ='A'; i < 'z'; i++)
        {
            mDatas.add("" + (char) i);
        }
    }

    class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>
    {

        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
        {
            MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                    HomeActivity.this).inflate(R.layout.item_home, parent,
                    false));
            return holder;
        }

        @Override
        public voidonBindViewHolder(MyViewHolder holder, int position)
        {
            holder.tv.setText(mDatas.get(position));
        }

        @Override
        public intgetItemCount()
        {
            return mDatas.size();
        }

        class MyViewHolder extends ViewHolder
        {

            TextView tv;

            public MyViewHolder(View view)
            {
                super(view);
                tv = (TextView) view.findViewById(R.id.id_num);
            }
        }
    }

}

这样基本的listview就实现了
想要改变布局其实非常简单 一行代码就可以改变为gridview形式
mRecyclerView.setLayoutManager(new GridLayoutManager(this,4));
瀑布流同样如此
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));

配合之前我们的OkHttp使用就可以获取我们的网络数据了,
改变我们的布局 添加配置 达到我们想要出现的效果

Acitivity布局
<android.support.v7.widget.RecyclerView    android:layout_below="@+id/goods_searchLine"    android:id="@+id/id_recyclerview"    android:divider="#ffff0000"    android:dividerHeight="10dp"    android:layout_width="match_parent"    android:layout_height="match_parent" />

布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:background="#44ff0000"    android:layout_height="wrap_content"    android:layout_marginBottom="5dp"    ><LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="vertical"    >    <ImageView        android:id="@+id/id_img"        android:layout_width="80dp"        android:layout_height="wrap_content"        android:src="@mipmap/ic_launcher"        />    <TextView        android:id="@+id/id_num"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:text="1" /></LinearLayout></FrameLayout>

这里我实现的是一个图片一个标题的效果 frameLayout不能使用 below 或者 orientation 所以可以自己嵌套一个线性布局或者相对布局
实现图片就可以使用我们的imageLoader