Android中的L RecyclerView挑战 [英] Challenges in RecyclerView of Android L

查看:198
本文介绍了Android中的L RecyclerView挑战的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在玩弄 RecyclerView 一点点。有没有简单的方法把 OnClickListener RecyclerView 的项目?我曾尝试实施它在 ViewHolder onclick事件从未被触发。

和我已经使用 notifyItemInserted(位置)添加新值 RecyclerView 的用户界面不会得到自动刷新。需要上下拉动刷新。但是,当我调用 notifyDatasetChanged(..),这是确定的。

我已经申请 DefaultItemAnimator RecyclerView 但是,没有看到任何动画,当新的产品加入。

感谢您事先的任何想法。

这是第一款Android L成分我已经测试过了,我stucking那里。

下面是我的适配器类:

 公共类AdapterRecyclerView扩展RecyclerView.Adapter< AdapterRecyclerView.MyViewHolder> {

私人列表<字符串> arrExperiences;

//提供一个参考意见,你所使用的类型 - 自定义ViewHolder
公共类MyViewHolder扩展RecyclerView.ViewHolder {

    公众的TextView tvExperienceTitle;
    公众的TextView tvExperienceDesc;

    公共MyViewHolder(RelativeLayout的ItemView控件){
        超(ItemView控件);
        tvExperienceTitle =(TextView中)itemView.findViewById(R.id.tv_experience_title);
        tvExperienceDesc =(TextView中)itemView.findViewById(R.id.tv_experience_desc);
    }

}

//提供一个合适的构造函数:根据其种类的数据集。
公共AdapterRecyclerView(名单<字符串> arrExperiences){
    this.arrExperiences = arrExperiences;
}

//创建新的观点:通过布局管理器调用
@覆盖
公共AdapterRecyclerView.MyViewHolder onCreateViewHolder(ViewGroup中的父母,INT viewType){
    RelativeLayout的观点=(RelativeLayout的)LayoutInflater.from(parent.getContext())膨胀(R.layout.view_item_recycler,父母,假)。
    MyViewHolder myViewHolder =新MyViewHolder(视图);
    返回myViewHolder;
}

@覆盖
公共无效onBindViewHolder(AdapterRecyclerView.MyViewHolder viewHolder,INT位置){
    //从数据集中在该位置获得元素。
    //替换与此元素的视图的内容。
    viewHolder.tvExperienceTitle.setText(arrExperiences.get(位置));
}

@覆盖
公众诠释getItemCount(){
    返回arrExperiences.size();
}

公共无效addExperience(字符串经验,INT位置){
    arrExperiences.add(位置,经验);
    notifyItemInserted(位置);
    // notifyDataSetChanged();
}

公共无效removeExperience(){
    INT指数=(int)的(的Math.random()* arrExperiences.size());
    arrExperiences.remove(指数);
    notifyItemRemoved(指数);
    // notifyDataSetChanged();
}
}
 

解决方案

这里你得到一个简单的适配器类,它可以每个列表行的 recyclerview

执行 onItemClick 事件

I have been playing around with RecyclerView for a little bit. Is there any easy way to put OnClickListener for items in RecyclerView? I have tried implementing it in ViewHolder. The onClick event never got triggered.

And I have used notifyItemInserted(position) for adding new value into RecyclerView. The UI does not got refreshed automatically. Needed to pull up and down to refresh. But when I invoke notifyDatasetChanged(..), it is ok.

I have applied DefaultItemAnimator to RecyclerView. But, not seeing any animation when new item added.

Thanks advance for any idea.

This is the first Android L component I have tested out and I am stucking there.

Here is my Adapter class:

public class AdapterRecyclerView extends RecyclerView.Adapter<AdapterRecyclerView.MyViewHolder> {

private List<String> arrExperiences;

//Provide a reference to the type of views that you are using - Custom ViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder {

    public TextView tvExperienceTitle;
    public TextView tvExperienceDesc;

    public MyViewHolder(RelativeLayout itemView) {
        super(itemView);
        tvExperienceTitle = (TextView) itemView.findViewById(R.id.tv_experience_title);
        tvExperienceDesc = (TextView) itemView.findViewById(R.id.tv_experience_desc);
    }

}

//Provide a suitable constructor : depending on the kind of dataset.
public AdapterRecyclerView(List<String> arrExperiences){
    this.arrExperiences = arrExperiences;
}

//Create new view : invoke by a Layout Manager
@Override
public AdapterRecyclerView.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    RelativeLayout view = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item_recycler, parent, false);
    MyViewHolder myViewHolder = new MyViewHolder(view);
    return myViewHolder;
}

@Override
public void onBindViewHolder(AdapterRecyclerView.MyViewHolder viewHolder, int position) {
    //get element from your dataset at this position.
    //replace the content of the view with this element.
    viewHolder.tvExperienceTitle.setText(arrExperiences.get(position));
}

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

public void addExperience(String experience, int position){
    arrExperiences.add(position, experience);
    notifyItemInserted(position);
    //notifyDataSetChanged();
}

public void removeExperience(){
    int index = (int) (Math.random() * arrExperiences.size());
    arrExperiences.remove(index);
    notifyItemRemoved(index);
    //notifyDataSetChanged();
}
}

解决方案

Here you get a simple Adapter class which can perform onItemClick event on each list row for the recyclerview.

这篇关于Android中的L RecyclerView挑战的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆