如何为RecycleView中的项目创建点击动画

13
3个回答

44

这很容易做到。在为RecycleView的每一行充气的视图的布局文件中,将顶级视图设置为可点和可聚焦。然后,将该视图的背景设置为?android:attr/selectableItemBackground。根据您发布的GitHub项目,看起来您为每一行充气的视图是item_demo_01.xml。因此,该布局现在将类似于这样:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container_list_item"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:focusable="true"
    android:background="?android:attr/selectableItemBackground">

    <include layout="@layout/common_item_layout" />

</RelativeLayout>

谢谢Nathan,我会尽快研究这个。这似乎更简洁,我会试一下并很快让你知道结果 =) - Ted
1
运行得非常好 =) - Ted
@Ted 很高兴听到这个! - Nathan Walters

2
您可以在您的RecyclerAdapter类中使用ViewHolder来完成此操作。
//this goes in your recyclerView adapter....
  /**
     * View holder for workouts
     */
    public static class MyViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView mTitleView;
        public TextView mTView1;
        public View homeView;

        public MyViewHolder(View itemLayoutView) {
            super(itemLayoutView);
            this.homeView = itemLayoutView;
            this.mTitleView = (TextView) itemLayoutView.findViewById(R.id.workoutItemTitleText);
            this.mTView1 = (TextView) itemLayoutView.findViewById(R.id.workoutItemWorkoutSets);
            homeView.setOnClickListener(new ON)
        }
    }

     //other code.....

  @Override
    public void onBindViewHolder(WorkoutViewHolder viewHolder, int position) {
        viewHolder.mTView1.setText("");
        viewHolder.mTitleView.setText("");
       //pass the position to the view in the onclick listener
        viewHolder.homeView.setId(position);
        viewHolder.homeView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               //this list item has been clicked, do something. maybe use an interface or something to notify your activity/fragment. 
            }
        });
    }

//the rest of your code.....

在onBindViewHolder方法中,您可以为该视图实现动画逻辑,并将其传递给活动或片段。只需为您的recyclerview适配器创建自定义接口,并创建一个像setMyOnItemClickListener(new MyOnItemClickListener)这样的方法。然后,在单击项目时,通知您的自定义接口并执行某些操作。


谢谢。但我仍然不明白如何做。这真的是正确的方法吗?就Material Design而言,它应该更容易且是开发的自然部分,但这种方法似乎很繁琐?或者我理解错了吗? - Ted
这有点像是一个hack,但这是为数不多的几种方法之一。基本的RecyclerAdapter类没有像列表视图和网格视图那样的“onItemClick”方法。Recycler View旨在具有超级灵活性,因此许多关于它及其适配器的内容都是基础的,以允许开发人员按照自己的意愿进行操作。不幸的是,现在很难切换到不同的布局类型,但希望将来会有所改变。 - Developer Paul
谢谢你的输入,保罗 =) - Ted

1
对于那些在未来潜伏的人,我必须修改Nathan Walter的答案,以便我的东西能够正常工作。
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"

使用foreground而不是background。因为在我的情况下,有一个带有自己不透明背景的textview位于LinearLayout内部。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接