Android开发,RecyclerViewfragment嵌套fragmentRecyclerView

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!你的位置:
> Android中RecyclerView实现Item添加和删除的代码示例
Android中RecyclerView实现Item添加和删除的代码示例
发表于( 00:00) 本文标签:
浏览量:711次
&&&&值班编辑QQ:
本文介绍了Android中RecyclerView实现Item添加和删除的代码示例,分享给大家,具体如下:先上效果图:RecyclerView简介:RecyclerView用以下两种方式简化了数据的展示和处理:1. 使用LayoutManager来确定每一个item的排列方式。2. 为增加和删除项目提供默认的动画效果,也可以自定义。RecyclerView项目结构如下:Adapter:使用RecyclerView之前,你需要一个继承自RecyclerView.Adapter的适配器,作用是将数据与每一个条目的界面进行绑定。LayoutManager:用来确定每一个item如何进行排列摆放,何时展示和隐藏。RecyclerView-Item添加:在适配器中加入如下代码:
// 添加数据
public void addData(int position) {//
在list中添加数据,并通知条目加入一条
list.add(position, "我是商品" + position);
//添加动画
notifyItemInserted(position);
}调用时: adapter.addData(list.size());RecyclerView-Item删除:在适配器中加入如下代码:
// 删除数据
public void removeData(int position) {
list.remove(position);
//删除动画
notifyItemRemoved(position);
notifyDataSetChanged();
}调用时://Item里的删除
removeData(position);//外面的控件的删除adapter. removeData(position);需要注意的是我再删除动画的下面加了notifyDataSetChanged();代码,因为我们在删除条目时不一定是按照顺序删除的,也许是错位删除,这样会因为position的原因造成角标越界异常,所以需要整体刷新一下。整体代码:**1.MainActivity **package com.android.qzs.import android.support.v7.app.AppCompatAimport android.os.Bimport android.support.v7.widget.DefaultItemAimport android.support.v7.widget.LinearLayoutMimport android.support.v7.widget.RecyclerVimport android.view.Vimport android.widget.ImageVimport java.util.ArrayLimport java.util.Lpublic class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerV
private ImageView iv_
private RecycleA
private List&String& list = new ArrayList&String&();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initRecycle();
iv_add.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
添加自带默认动画
adapter.addData(list.size());
private void initRecycle() {
// 纵向滑动
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(linearLayoutManager);//
获取数据,向适配器传数据,绑定适配器
list = initData();
adapter = new RecycleAdapter(MainActivity.this, list);
mRecyclerView.setAdapter(adapter);//
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
private void initView() {
iv_add = (ImageView) findViewById(R.id.iv_add);
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
protected ArrayList&String& initData() {
ArrayList&String& mDatas = new ArrayList&String&();
for (int i = 0; i & 1; i++) {
mDatas.add("我是商品" + i);
}}2.RecycleAdapterpackage com.android.qzs.import android.content.Cimport android.support.design.widget.Simport android.support.v7.widget.RecyclerVimport android.view.LayoutIimport android.view.Vimport android.view.ViewGimport android.widget.TextVimport java.util.ArrayLimport java.util.L/** * Created by qzs on . */class RecycleAdapter extends RecyclerView.Adapter&RecycleAdapter.MyViewHolder& {
private List&String&
public RecycleAdapter(Context context, List&String& list) {
this.context =
this.list =
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
context).inflate(R.layout.item_home, parent,
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.tv.setText(list.get(position));
holder.tv_delete.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (list.size() == 1) {
Snackbar.make(v, "此条目不能删除", Snackbar.LENGTH_SHORT).show();
删除自带默认动画
removeData(position);
public int getItemCount() {
return list.size();
// 添加数据
public void addData(int position) {//
在list中添加数据,并通知条目加入一条
list.add(position, "我是商品" + position);
//添加动画
notifyItemInserted(position);
// 删除数据
public void removeData(int position) {
list.remove(position);
//删除动画
notifyItemRemoved(position);
notifyDataSetChanged();
* ViewHolder的类,用于缓存控件
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv, tv_
//因为删除有可能会删除中间条目,然后会造成角标越界,所以必须整体刷新一下!
public MyViewHolder(View view) {
super(view);
tv = (TextView) view.findViewById(R.id.id_num);
tv_delete = (TextView) view.findViewById(R.id.tv_delete);
}}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。热点资讯[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&
米兔积木机器人获最具创新品牌奖 天猫金婴节HIGH爆全场
五横两纵,平稳可靠――安擎中小企业创新服务云平台
从此告别遥控器:智能语音空调时代开启
“美国找工作难”是个伪命题,LaiOffer架起IT人才就业直通车
中国创投金鹰奖暨中国创业企业新苗榜榜单出炉,深睿医疗榜上有名
钱江机器人明星产品引爆埃森展 助力中国制造升级
中信双创是中信集团持续创新的组织者,是中信集团互联网+转型战略落地实施的重要环节。2016年,中信集团成立了互联网+工作小组,深入研究如何链接和利用产业数据资源以充分发挥中信生态圈的互联互通和协同效应,在中信产业生态圈对接更多合作伙伴,拓展合作
日前,航旅高端峰会Digital Travel APAC 2018在新加坡启幕。作为业界备受瞩目的航旅峰会,Digital Travel APAC 2018聚集了全球顶尖的航旅企业,包括香港迪士尼、携程、亚太领先的旅行体验预订平台客路旅行、新西兰航空等,希望解决航旅企业面临的电子商务和
每一次的科技进步,总是以光一般的速度影响并颠覆我们的生活方式,不断照亮我们生活的方方面面。日,科大讯飞「AI飞无界」新品发布会在深圳成功举办。本次发布会发布了科大讯飞AIUI3.0、其中包括魔飞(MORFEI)2.0,智能物联云AIoT、以及iFLYOS。
近期细心的网友发现有一家来自中国的高科技企业在美国专为具有创意方案企业筹资的众筹网站平台&mdas...
在这个数据爆炸的年代,我们获取数据的难度大大降低,但要获取数据的价值仅依靠简单的数据分析是不可行的。如果将大数据看作一个产业,那么数据深挖(挖掘)就是其中一项核心技术,数据深挖(挖掘)通常与计算机科学有关,如数据统计、数据检索、分析处理、
交通领域的发展日趋全面,以公路和铁路网络构成的核心出行市场已经趋于稳定。地铁、公交、汽车是无可替代的三巨头。而曾经作为出行必需品的电动车,在受众日渐提高的需求下,也催生出新的行业竞争规则。这个二十年前的行业霸主,也不得不接受走入下半场的命
近日,捷通华声公司与清华海峡研究院就加强深度合作,共同创建与加强清华海峡研究院人工智能研究中心达成共识。为进一步促进清华大学人工智能技术产学研一体化发展进程,助力厦门市、福建省等东南地区的人工智能产业发展,促进产业智能化升级与应用落地,捷在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
像这种需要recyclerview嵌套recyclerview的情况有没有比较好的解决方案
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
为何我看到的第一印象是流式布局 FlowLayout,
你动态的 addView() 也是可以做到的
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
同求,之前我有类似需求的时候,如果内容不是太多,会在内嵌套一个list/recycler View并抛掉所有触摸事件避免滑动冲突,着实是不太优雅。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
在我看来这不是recyclerView嵌套recyclerView 一个recyclerView就可以搞定 只是要显示不同的list的数据和不同的item,我的思路是新建一个baseModel
两个数据源的bean 继承于baseModel,还是看代码 说是说不清楚
public class ModelBase {
public int BEAN_SORT = -1;
public int BEAN_TYPE = -1;
public class AnimalModel extends ModelBase {
public class PersonModel extends ModelBase {
private S}
public class MainActivity extends AppCompatActivity {
RecyclerView rvM
private ArrayList&ModelBase&
private enum BASE_TYPE {
TYPE_PERSON, TYPE_ANIMAL
private ModelA
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rvModel = (RecyclerView) findViewById(R.id.recycler_view);
list = new ArrayList&ModelBase&();
rvModel.setLayoutManager(new LinearLayoutManager(this));
bindData();
adapter = new ModelAdapter();
rvModel.setAdapter(adapter);
private void bindData() {
PersonModel person1 = new PersonModel(1, "大白", 25, "");
list.add(person1);
PersonModel person2 = new PersonModel(2, "二白", 25, "");
list.add(person2);
AnimalModel animal1 = new AnimalModel(1, "兔子", 2, "", "");
list.add(animal1);
AnimalModel animal2 = new AnimalModel(1, "兔子2", 2, "森林", "");
list.add(animal2);
PersonModel person3 = new PersonModel(3, "三白", 25, "");
list.add(person3);
AnimalModel animal3 = new AnimalModel(1, "兔子3", 2, "森林", "");
list.add(animal3);
PersonModel person4 = new PersonModel(4, "四白", 25, "");
list.add(person4);
PersonModel person5 = new PersonModel(5, "小白", 25, "");
list.add(person5);
AnimalModel animal4 = new AnimalModel(1, "兔子4", 2, "森林", "");
list.add(animal4);
Collections.sort(list, new Comparator&ModelBase&() {
public int compare(ModelBase model1, ModelBase model2) {
return model2.data.compareTo(model1.data);
class ModelAdapter extends RecyclerView.Adapter&RecyclerView.ViewHolder& {
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == BASE_TYPE.TYPE_PERSON.ordinal()) {
return new PersonViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_person, parent, false));
} else if (viewType == BASE_TYPE.TYPE_ANIMAL.ordinal()) {
return new AnimalViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_animal, parent, false));
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof PersonViewHolder) {
((PersonViewHolder) holder).tvPerson.setText(((PersonModel) list.get(position)).getName());
if (holder instanceof AnimalViewHolder) {
((AnimalViewHolder) holder).tvAnimal.setText(((AnimalModel) list.get(position)).getName());
public int getItemCount() {
return list.size();
public int getItemViewType(int position) {
if (list.get(position).BEAN_TYPE == 1) {
return BASE_TYPE.TYPE_PERSON.ordinal();
} else if (list.get(position).BEAN_TYPE == 2) {
return BASE_TYPE.TYPE_ANIMAL.ordinal();
class PersonViewHolder extends RecyclerView.ViewHolder {
TextView tvP
public PersonViewHolder(View itemView) {
super(itemView);
tvPerson = (TextView) itemView.findViewById(R.id.tv_person);
class AnimalViewHolder extends RecyclerView.ViewHolder {
TextView tvA
public AnimalViewHolder(View itemView) {
super(itemView);
tvAnimal = (TextView) itemView.findViewById(R.id.tv_animal);
你可以照着列子敲一下 bean省去了set和get方法 布局文件也是很简单
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
用expandListView 干嘛非要用recyclerView
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!由 匿名 (未验证)
在一个recyclerviewA中嵌套recyclerviewB,即在recyclerviewA的item中装入recyclerviewB,recyclerviewA竖直排列,recyclerviewB水平排列,然后需求是recyclerviewA的每个item要同步滚动,比如说当前显示了A的4个ITEM,当我们滑动第一个item的viewB时,其他3个item也要同步滑动。
当时的实现是,把每个recyclerviewB都保存到一个List中,然后其中一个RecyclerviewB滚动后,就通知其他的recyclerviewB滚动,但是在同步滑动的时候老是遇到如下错误:
java.lang.NullPointerException: Attempt to read from field 'java.util.ArrayList android.support.v7.widget.StaggeredGridLayoutManager$Span.mViews' on a null object reference
at android.support.v7.widget.StaggeredGridLayoutManager.recycleFromStart(StaggeredGridLayoutManager.java:1929)
at android.support.v7.widget.StaggeredGridLayoutManager.recycle(StaggeredGridLayoutManager.java:1804)
at android.support.v7.widget.StaggeredGridLayoutManager.fill(StaggeredGridLayoutManager.java:1713)
at android.support.v7.widget.StaggeredGridLayoutManager.scrollBy(StaggeredGridLayoutManager.java:2186)
at android.support.v7.widget.StaggeredGridLayoutManager.scrollHorizontallyBy(StaggeredGridLayoutManager.java:2039)
at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1811)
at android.support.v7.widget.RecyclerView.scrollBy(RecyclerView.java:1722)
at com.changhong.presentation.view.adapter.EpgSchListAdapterCache$1.onScrolled(EpgSchListAdapterCache.java:232)
当recyclerviewA上下滑动时,某些RecyclerviewB会变成不可见状态,这时候如果我们再去调用不可见的Recyclerview的scrollBy方法,就会出现上述问题,解决办法就是当A的adapter中的onViewAttachedToWindow和onViewDetachedFromWindow对recyclerviewB的List进行控制
public void onViewAttachedToWindow(@NonNull EpgViewHolder holder) {
epgRecyclerViewManager.insertSchListRecyclerView((int)holder.itemView.getTag(),holder.recy
clerView);
super.onViewAttachedToWindow(holder);
public void onViewDetachedFromWindow(@NonNull EpgViewHolder holder) {
epgRecyclerViewManager.removeSchListRecyclerView((int)holder.itemView.getTag());
super.onViewDetachedFromWindow(holder);
在上述代码中,onViewAttachedToWindow中将recyclerviewB加入到要滑动的List中,在onViewDetachedFromWindow中将recyclerviewB从List中移除
添加新评论}

我要回帖

更多关于 嵌套查询 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信