Android 5.0 的 ReycylerView 应用


Android 5.0 的 ReycylerView 应用

年前做了总结,说好了,两周至少一篇技术文章,好吧,三月份,就先拿5.0的控件凑凑数。(三月跳槽高峰期,我也在找工作,有深圳,有推荐的么?)

我们现在 AS 的项目文件中引入 reycylerview 的支持库:

compile 'com.android.support:recyclerview-v7:21.0.3'

然后我们在 xml 中使用 reyclerview

<android.support.v7.widget.recyclerview
    android:id="@+id/VerticalLinearRecyclerView"
    android:layout_height="0dp"
    android:layout_margintop="10dp"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:scrollbars="vertical"/>

接下来,我们在 activity 中获取并添加适配器,并添加数据适配器,恩适配器需要使用最新的viewholder。

RecyclerView VerticalLinearRecyclerView= (RecyclerView) rootView.findViewById(R.id.VerticalLinearRecyclerView);
LinearLayoutManager VerticallinearLayoutManager = new LinearLayoutManager(getActivity()); //这里根据布局管理器设置实际布局方向,不像listview就是固定的竖直方向
VerticallinearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
// 创建数据集
String[] dataset = new String[100];
for (int i = 0; i < dataset.length; i++){
    dataset[i] ="item" + i;
}
// 创建Adapter,并指定数据集
RecyclerViewAdapter adapter = new RecyclerViewAdapter(getActivity(),dataset);
VerticalLinearRecyclerView.setAdapter(adapter);

接下来,我们看看他的适配器是怎么和 viewholder做到一起的。

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
    // 数据集
    private String[] mDataset;
    private Context mContext;
    public RecyclerViewAdapter(Context context,String[] dataset) {
        super();
        mDataset = dataset;
        mContext = context;
    }

    @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        // 创建一个View,简单起见直接使用系统提供的布局,就是一个TextView
        View view = View.inflate(viewGroup.getContext(), android.R.layout.simple_list_item_1, null);
        // 创建一个ViewHolder
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override public void onBindViewHolder(ViewHolder viewHolder, int i) {
        // 绑定数据到ViewHolder上
        viewHolder.mTextView.setText(mDataset[i]);
        viewHolder.mTextView.setOnClickListener(new OnClick(i));
    }

    @Override public int getItemCount() {
        return mDataset.length;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder{
        public TextView mTextView;
        public ViewHolder(View itemView) {
            super(itemView);
            mTextView = (TextView) itemView;
        }
    }

    /** * item内部控件点击事件的实现 */
    class OnClick implements View.OnClickListener {
        private int position;
        public OnClick(int position) {
          this.position = position;
        }
        @Override public void onClick(View v) {
            Toast.makeText(mContext, "你点击了第" + position + "个text", Toast.LENGTH_SHORT).show();
        }
    }
}

恩,没错,你看到的,使用viewholder做数据绑定之后,就没有所谓getview的方法,然后还需要你自己是写缓存了。

当然,还能根据不同的布局管理器,实现不同的方法。

这个有demo演示,在我的github里面

声明:Jiechic's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Android 5.0 的 ReycylerView 应用


Just Jiechic's Blog