目录

一.右滑删除

1.设计界面

2.适应器adapter

3.在对应的fragment中设置

4.效果展示

二.点击展开

1.设计界面

2.建立适应器

3.在对应的Activity的Frament中设置

4.效果展示

三.点击跳转

1.原理

2.在adapter中定义如下接口,模拟ListView的OnItemClickListener:

3.在onCreateViewHolder()中为每个item添加点击事件

4.将点击事件转移给外面的调用者:

5.最后暴露给外面的调用者,定义一个设置Listener的方法():

6.在对应的fragment中使用

7.建立一个对应的跳转界面

8.其他

9.效果展示

四.代码链接


一.右滑删除

1.设计界面

微信界面导入 recycleview 的包

Friendweixin.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"xmlns:app="http://schemas.android.com/apk/res-auto"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/swipe"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="8dp" //边距为 8dpandroid:overScrollMode="never" //设置滑动到边缘时无效果模式android:scrollbars="none" //滚动条隐藏app:layout_constraintEnd_toEndOf="parent"
//结束时对其下一个 view 结束的位置app:layout_constraintStart_toStartOf="parent"
//view1 起始位置对齐 view2 的起始位置app:layout_constraintTop_toTopOf="parent" />
//view1 顶部对齐 view2 的顶部
</androidx.constraintlayout.widget.ConstraintLayout

Itemweixin.xml:

外层是垂直的 LinearLayout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="50dp"android:layout_margin="8dp"android:background="@drawable/common_bg"android:orientation="vertical"><TextViewandroid:id="@+id/content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="8dp" />
</LinearLayout>

Itemtop.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/header_view"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#3E8841"android:padding="10dp"android:textColor="@android:color/white"android:textSize="14sp"tools:text="@string/app_name" />

2.适应器adapter

Myadapterweixin,java:

package com.example.myapplication1;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class myadapterweixin extends
RecyclerView.Adapter<myadapterweixin.swipeviewholder> implements
TouchHelperListener {private List<String>list;private Context context;private View inflater;public myadapterweixin(Context context, List<String> list) {this.context=context;this.list=list;}@Overridepublic swipeviewholder onCreateViewHolder(ViewGroup parent, int
viewType) {inflater=
LayoutInflater.from(context).inflate(R.layout.itemweixin,parent,false
);swipeviewholder swipeviewholder=new swipeviewholder(inflater);return swipeviewholder;}@Overridepublic void onBindViewHolder(swipeviewholder holder, int
position) {holder.tvContent.setText(list.get(position));}@Overridepublic int getItemCount() {return list.size();}@Overridepublic void OnItemDismiss(int position) {if (position < 0 || position > getItemCount()) {return;}list.remove(position);notifyItemRemoved(position);if (position != list.size()) {notifyItemRangeChanged(position, list.size() -
position);}}public class swipeviewholder extends RecyclerView.ViewHolder{TextView tvContent;public swipeviewholder(View itemView) {super(itemView);tvContent = itemView.findViewById(R.id.content);}}
}

3.在对应的fragment中设置

Contentweixin.java:

package com.example.myapplication1;
import android.content.Context;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class contentweixin extends Fragment {private RecyclerView recyclerView;private List<String> mList = new ArrayList<>();private Context context;private com.example.myapplication1.myadapterweixin
myadapterweixin;// TODO: Rename parameter arguments, choose names that match// the fragment initialization parameters, e.g. ARG_ITEM_NUMBERprivate static final String ARG_PARAM1 = "param1";private static final String ARG_PARAM2 = "param2";// TODO: Rename and change types of parametersprivate String mParam1;private String mParam2;public contentweixin() {}public static contentweixin newInstance(String param1, String
param2) {contentweixin fragment = new contentweixin();Bundle args = new Bundle();args.putString(ARG_PARAM1, param1);args.putString(ARG_PARAM2, param2);fragment.setArguments(args);return fragment;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (getArguments() != null) {mParam1 = getArguments().getString(ARG_PARAM1);mParam2 = getArguments().getString(ARG_PARAM2);}}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup
container,Bundle savedInstanceState) {View view= inflater.inflate(R.layout.contentweixin, container,
false);recyclerView=view.findViewById(R.id.swipe);initData();initView();return view;}private void initData() {mList.add("诈骗人员:\n 你中奖 2000 元,回复 TD 领取");mList.add("社会龙哥:\n 好小子,你给我等着");mList.add("zz:\n 给我带碗饭");mList.add("wk:\n 这个作业怎么写");mList.add("yxf:\n 吃烧烤去");mList.add("金克斯:\n 你的建议我会考虑接受的");mList.add("亚索:\n 我再说一遍,我不是孤儿");mList.add("薇古丝:\n 亚索,我是你爹");mList.add("simple:\n 你好,我是 simple");mList.add("Niko:\n 你好,希望您能到我们队来试训");mList.add("麦克:\n 那个家伙来了");mList.add("斯威特:\n 那儿很危险,你不要去");mList.add("灵狐:\n 我会试着去接受你");mList.add("老师:\n 你学分没了");mList.add("学姐:\n 干得不错");mList.add("抽奖人员:\n 你运气真的好,抽到了一等奖");mList.add("追债的:\n 你小子别以为龙哥给你撑腰就行了");mList.add("高中老师:\n 我儿子在考场里全靠你");}private void initView(){context=this.getActivity();myadapterweixin=new myadapterweixin(context,mList);ItemTouchHelper.Callback callback = new
TouchHelper(myadapterweixin);ItemTouchHelper touchHelper = new ItemTouchHelper(callback);touchHelper.attachToRecyclerView(recyclerView);LinearLayoutManager manager=new LinearLayoutManager(context);manager.setOrientation(LinearLayoutManager.VERTICAL);recyclerView.setAdapter(myadapterweixin);recyclerView.setLayoutManager(manager);recyclerView.setHasFixedSize(true);}
}

4.效果展示

二.点击展开

1.设计界面

朋友界面导入 recycleview 包

最外层为 constraintlayout,里层为 recycleview

Friendweixin.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycleview1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:overScrollMode="never"
android:scrollbars="none"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

建立一个 item.xml

Itemfriend.xml:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"xmlns:tools="http://schemas.android.com/tools"android:layout_margin="5dp"android:orientation="vertical"><RelativeLayoutandroid:id="@+id/rl_parent"android:layout_width="match_parent"android:layout_height="50dp"android:background="#3E8841"><TextViewandroid:id="@+id/tv_team"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:textColor="@android:color/white"tools:text="主布局" /></RelativeLayout><RelativeLayoutandroid:id="@+id/rl_child"android:layout_width="match_parent"android:layout_height="100dp"android:background="#54CC58"android:visibility="visible"><TextViewandroid:id="@+id/tv_team_child"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:textColor="@android:color/white"tools:text="副布局" /></RelativeLayout>
</LinearLayout>

2.建立适应器

Myadapterfriend.java:

package com.example.myapplication1;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class myadapterfriend extends
RecyclerView.Adapter<myadapterfriend.expandviewholder>{private List<String>list;private Context context;private View inflater;private int expandedPosition = -1;private expandviewholder mViewHolder;public myadapterfriend(Context context, List<String> list) {this.context=context;this.list=list;}@Overridepublic myadapterfriend.expandviewholder
onCreateViewHolder( ViewGroup parent, int viewType) {inflater=
LayoutInflater.from(context).inflate(R.layout.itemfriend,parent,false
);expandviewholder expandviewholder=new
expandviewholder(inflater);return expandviewholder;}
//使用 inflate 将 xml 文件压入容器中@Overridepublic void onBindViewHolder(final
myadapterfriend.expandviewholder holder, int position) {holder.tvTeam.setText(list.get(position));holder.tvTeamChild.setText(list.get(position) + "的朋友圈");final boolean isExpanded = position == expandedPosition;holder.rlChild.setVisibility(isExpanded ? View.VISIBLE :
View.GONE);holder.rlParent.setOnClickListener(new View.OnClickListener()
{@Overridepublic void onClick(View v) {if (mViewHolder != null) {mViewHolder.rlChild.setVisibility(View.GONE);notifyItemChanged(expandedPosition);}expandedPosition = isExpanded ? -1 :
holder.getAdapterPosition();mViewHolder = isExpanded ? null : holder;notifyItemChanged(holder.getAdapterPosition());}});}@Overridepublic int getItemCount() { return list.size();}class expandviewholder extends RecyclerView.ViewHolder{RelativeLayout rlParent, rlChild;TextView tvTeam, tvTeamChild;public expandviewholder(View itemView) {super(itemView);rlParent = itemView.findViewById(R.id.rl_parent);rlChild = itemView.findViewById(R.id.rl_child);tvTeam = itemView.findViewById(R.id.tv_team);tvTeamChild = itemView.findViewById(R.id.tv_team_child);}}
}

3.在对应的Activity的Frament中设置

Fried.java:

package com.example.myapplication1;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class friend extends Fragment {private RecyclerView recyclerView;private myadapterfriend myadapter;private List<String> mList = new ArrayList<>();private Context context;public friend() {}
//使用 inflate 将 xml 文件压入容器中@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup
container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.friendweixin,
container,false);context = this.getActivity();recyclerView = view.findViewById(R.id.recycleview1);initexpandData();initView();return view;}private void initexpandData(){mList.add("诈骗人员");mList.add("社会龙哥");mList.add("zz");mList.add("wk");mList.add("yxf");mList.add("金克斯");mList.add("亚索");mList.add("薇古丝");mList.add("simple");mList.add("Niko");mList.add("麦克");mList.add("斯威特");mList.add("灵狐");mList.add("老师");mList.add("学姐");mList.add("抽奖人员");mList.add("追债的");mList.add("战争之王 潘森 ");mList.add("钢铁大使 波比 ");mList.add("机械公敌 兰博 ");mList.add("猩红收割者 弗拉基米尔");mList.add("光辉女郎 拉克丝");mList.add("末日使者 费德提克");mList.add("狂暴之心 凯南 ");mList.add("邪恶小法师 维迦");mList.add("流浪法师 瑞兹 ");mList.add("冰晶凤凰 艾尼维亚 ");mList.add("暗影之拳 阿卡丽");mList.add("诡术妖姬 乐芙兰 ");mList.add("卡牌大师 崔斯特");}private void initView(){context=this.getActivity();myadapter=new myadapterfriend(context,mList);LinearLayoutManager manager=new LinearLayoutManager(context);manager.setOrientation(LinearLayoutManager.VERTICAL);recyclerView.setAdapter(myadapter);recyclerView.setLayoutManager(manager);recyclerView.setHasFixedSize(true);recyclerView.addItemDecoration(new
DividerItemDecoration(context, DividerItemDecoration.VERTICAL));}
}

4.效果展示

三.点击跳转

1.原理

为RecyclerView的每个子item设置setOnClickListener,然后在onClick中再调用一次对外封装的接口,将这个事件传递给外面的调用者。而“为RecyclerView的每个子item设置setOnClickListener”在Adapter中设置。

2.在adapter中定义如下接口,模拟ListView的OnItemClickListener:

 public  interface OnItemClickListener {void onItemClick(View view , int position);}

3.在onCreateViewHolder()中为每个item添加点击事件

 public swipeviewholder onCreateViewHolder(ViewGroup parent, int viewType) {inflater= LayoutInflater.from(context).inflate(R.layout.itemweixin,parent,false);swipeviewholder swipeviewholder=new swipeviewholder(inflater);inflater.setOnClickListener(this::onClick);return swipeviewholder;}

4.将点击事件转移给外面的调用者:

public void onClick(View v) {if (mOnItemClickListener != null) {//注意这里使用getTag方法获取positionmOnItemClickListener.onItemClick(v,(int)v.getTag());}}

5.最后暴露给外面的调用者,定义一个设置Listener的方法():

 public void setOnItemClickListener(OnItemClickListener listener) {this.mOnItemClickListener = listener;}

6.在对应的fragment中使用

myadapterweixin.setOnItemClickListener(new myadapterweixin.OnItemClickListener(){@Overridepublic void onItemClick(View view , int position){Intent intent=new Intent(context,MainActivity3.class);intent.putExtra("milst", String.valueOf(mList));intent.putExtra("name", "jxl");startActivityForResult(intent,1);}});

7.建立一个对应的跳转界面

xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity2"><TextViewandroid:id="@+id/textView10"android:layout_width="190dp"android:layout_height="39dp"android:text="TextView" /><FrameLayoutandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"></FrameLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal"><EditTextandroid:id="@+id/editTextTextMultiLine"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="10"android:ems="10"android:gravity="start|top"android:inputType="textMultiLine"android:text="" /><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="发送" /></LinearLayout>
</LinearLayout>

MAINACTIVITY3:

public class MainActivity3 extends AppCompatActivity {private Intent intent;private TextView textView10;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main3);Intent intent2=getIntent();String name=intent2.getStringExtra("name");Log.d("life","name:"+name);Intent intent3=getIntent();textView10=findViewById(R.id.textView10);textView10.setText(intent3.getStringExtra("milst"));Intent intent1=getIntent();String teacher=intent1.getStringExtra("name");if (name.equals("jxl")){intent=new Intent();intent.putExtra("state","我今天很舒服");}else {if (name.equals("handsomeboy")){intent = new Intent();intent.putExtra("state", "我今天不舒服");}}setResult(31,intent);}@Overrideprotected void onStart() {super.onStart();Log.d("life","activity2 is onStart...");}@Overrideprotected void onRestart() {super.onRestart();Log.d("life","activity2 is onRestart...");}@Overrideprotected void onPostResume() {super.onPostResume();Log.d("life","activity2 is onPostResume...");}@Overrideprotected void onPause() {super.onPause();Log.d("life","activity2 is onPuse...");}@Overrideprotected void onStop() {super.onStop();Log.d("life","activity2 is onStop...");}@Overrideprotected void onDestroy() {super.onDestroy();Log.d("life","activity2 is onDestroy...");}@Overridepublic void finish() {super.finish();Log.d("life","activity2 is finsh...");}@Overridepublic void finishActivity(int requestCode) {super.finishActivity(requestCode);Log.d("life","activity2 is finshActivity...");}
}

8.其他

主要是将item对应的Textview传入Mainactivity3中

1)在fragment中设置intent

intent.putExtra("milst", String.valueOf(mList));

2)在跳转界面接收

Intent intent3=getIntent();textView10=findViewById(R.id.textView10);textView10.setText(intent3.getStringExtra("milst"));

9.效果展示

四.代码链接

https://gitee.com/mansions007/MyApplication1/tree/master/app/src/main/java/com/example/myapplication1

AS2:实现右滑删除,点击展开及点击跳转相关推荐

  1. 利用swipelistview完成qq聊天列表右滑删除功能

    感谢HarryWeasley整理:http://blog.csdn.net/harryweasley/article/details/41413547 前言:前段时间,由于自己比较悠闲,没有什么工作上 ...

  2. 微信改成右滑删除_微信大更新!微信支持无损发送大文件;新增“裂开”等黄脸表情|一周资讯...

    微信生态 NO.1 微信支持无损发送大文件 今日,微信支持发送高清视频和图片,且不会被压缩.微信用户点击对话框右下角的 + 号,右滑点击"文件",在上方选择手机相册,就能选择想要发 ...

  3. 微信改成右滑删除_手机文件数据恢复,怎样恢复已过期的微信附件呢?

    手机文件数据恢复,怎样恢复已过期的微信附件呢?我们在恢复手机删除的文件之前,很多人都想知道,为什么自己的文件删除了可以被恢复,既然能被恢复,是我彻底删除不了手机的文件吗? 文件真的消失了吗? 事实上真 ...

  4. 自己实现一个右滑删除的ListView

    参考了以下源码:https://github.com/baoyongzhang/SwipeMenuListView 实现的效果(顺便推荐一个视频转gif的网址:http://www.gif5.net/ ...

  5. android微信右滑删除,Android实现微信侧滑删除当前页面

    本文实例为大家分享了微信侧滑删除当前页面的具体代码,供大家参考,具体内容如下 效果图不是太明显 实际上有finish动画 代码 package com.finddreams.slidingback.u ...

  6. iOS 为自定义返回按钮的页面添加右滑返回

    2019独角兽企业重金招聘Python工程师标准>>> 苹果一直都在人机交互中尽力做到极致,在iOS7中,新增加了一个小小的功能,也就是这个api:self.navigationCo ...

  7. 微信小程序实现列表项左滑删除效果

    效果 图片 WXML <view class="container"><!-- 收货地址 --><view class="address&q ...

  8. android listview左滑删除

    之前,自己使用listview一直是长按删除,不过发现qq的消息和ios的都是侧滑删除,觉得效果很好,于是自己就想做一个侧滑删除.在网上找了些资料,有很多不是我理想的侧滑删除,最后还是找到了一个不错的 ...

  9. Android开发学习之路-PopupWindow和仿QQ左滑删除

    这周作业,要做一个类似QQ的左滑删除效果的ListView,因为不想给每个item都放一个按钮,所以决定用PopupWindow,这里记录一下 先放一下效果图: 先说明一下这里面的问题: ①没有做到像 ...

最新文章

  1. 向量时钟算法简介——本质类似MVCC
  2. C/C++中.和-的用法区别
  3. QT中button中没有accept()和reject()这两个槽解决办法
  4. FreeRTOS及其应用,万字长文,基础入门
  5. Flink CDC 系列 - Flink MongoDB CDC 在 XTransfer 的生产实践
  6. Google验证码ReCaptcha V3
  7. android代码改字体颜色,如何更改Android Studio的代码字体和颜色
  8. 7-27 冒泡法排序 (20分) Kotlin
  9. Verilog全加器
  10. IAR下QSPI下载算法制作
  11. Django部署服务器
  12. 数据分析|爬取14455个基金,千万别被人当成韭菜给割了
  13. P02014132 魏思奇 对信息论几个问题的一些看法
  14. SD SDHC SDXC
  15. 检测不到声卡High Definition Audio控制器显示代码10?驱动人生教你如何解决问题
  16. Spring-retry重试组件
  17. Redis源码篇(1)——底层数据结构与对象
  18. MySQL基础之多表查询
  19. OCR图片预处理之去除印章(一)
  20. Unity实现动作游戏的技能系统(Ability System)设计原型

热门文章

  1. 单目相机提高标定精度的经验
  2. Cream Finance 重入漏洞事件分析
  3. 顺丰丰桥接口开发-java(订单取消接口)
  4. wdnas群晖nas_WD 西部数据 伪NAS折腾记 篇三:WD 西部数据 MyCloud安装黑群晖教程
  5. Modern Cpp 并发编程指南
  6. 如何在html网页里获取 mav.addObject(message,登录名或密码错误,请重新输入)的message
  7. android x86引导修复,Android-x86 9.0-r2 发布,更新内核与UEFI引导修复
  8. 天才拓荒者之冯诺依曼
  9. UBOOT I2C读写详解(基于mini2440)
  10. 2020最后1天朋友圈文案短句_2020余额不足,2021转账成功