创建Material样式卡片风格注意事项

这两天在摸索安卓的Material样式,在卡片风格这个栏目中(谷歌官方文档),参考(参考文档)其demo代码总是报错,错误在自定义的卡片adapter类中的onCreateViewHolder这个部份,在官方文档中的写法是:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;
        public ViewHolder(TextView v) {  //-->这个构造函数有问题
            super(v);
            mTextView = v;
        }
    }

    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext())
                               .inflate(R.layout.my_text_view, parent, false);
        // set the view's size, margins, paddings and layout parameters
        ...
        ViewHolder vh = new ViewHolder(v);   //-->注意这边有问题
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        holder.mTextView.setText(mDataset[position]);

    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}


原因是在ViewHolder的构造函数中仅仅指定了TextView类型的参数,如果按照这个参数去加载view,结果肯定是类型不匹配,无法运行,所以代码应该修改如下:

public static class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;

        public MyViewHolder(View itemView, TextView mTextView) {  //-->构造函数需要传入一个view参数和你需要的子控件参数,我这边只有一个textview
            super(itemView);
            this.mTextView = mTextView;
        }
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.attendace_card_view, parent, false);
        TextView tv=(TextView)v.findViewById(R.id.attendance_cardView_text1);
        MyViewHolder myViewHolder = new MyViewHolder(v,tv);<span style="white-space:pre">	</span>//-->这边也做相应的修改
        return myViewHolder;
    }

最后的实现效果如下:

(ps。图片比例调整了一下,所以看上去有点扁)

这应该算是官方文档的一个小bug?还是另有其他?



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值