(new LinearLayoutManager(this)); 五、 java.lang.IllegalStateException: RecyclerView has no LayoutManager...七、 Error install apk **方法一: 关闭Instant Run;方法一未解决,详见方法二 。...十五、 Binary XML file line # : Error inflating class 出现这种问题的原因可归结为以下几类: xml中自定义控件的包名未填写完整 自定义控件构造方法没有将三个构造函数都实现...十六、 LinearLayoutManager.scrollToPosition滚动无效 大家都知道,要想实现RecyclerView滚动,可以调用scrollToPosition方法,或得到它的LinearLayoutManager...,然后调用scrollToPosition来实现,但是今天在同一个方法里调用scrollToPosition,发现上一行执行了,下面的行却未执行?
,且控制台报错) recyclerView.setLayoutManager(viewManager); // 创建适配器对象,以渲染数据 MyAdapter...myAdapter = new MyAdapter(data, this); // 布局对象绑定适配器,以便于渲染视图了 recyclerView.setAdapter...(myAdapter); // 适配器绑定自定义的单击回调(需要在适配器内部自己创建方法!)...List list; private Context context; // 适配器的构造方法,并传入相应的参数 public MyAdapter(List<Bean...OnRecyClerItemClickListener listener) { mOnItemClickListener = listener; } // 定义本类接口,使得本类拥有自定义功能,需要在调用适配器时
{com.xxx.xxx/com.xxx.xx.activity.login.XXXX}: java.lang.NullPointerException: Attempt to read from field...就是viewBinding还没有来得及初始化之前,就调用了viewBinding的方法去获取PreviewView对象了。就会出现上面的问题了。...通过Binding 方法调用触发view绑定,也是有执行顺序和时间的。...正确写法为: viewBinding.recyclerClass.setLayoutManager(new LinearLayoutManager(this,RecyclerView.VERTICAL,...false)); viewBinding.recyclerGrop.setLayoutManager(new LinearLayoutManager(this,RecyclerView.VERTICAL
(positionToAdd); } 为RecyclerView添加item的点击事件 方法一:利用回调的方式实现(不太完善,仍可实现) 实现步骤如下: 在adapter类中,定义接口,接口中定义两个方法分别对应...{ // 单击事件 void onItemClick(View view ,int position); // 长按触发的事件 void...*/ public interface OnRecyclerViewItemClickListener{ // 单击事件 void onItemClick...:使用观察者模式实现 原理: 为RecyclerView的每个子item设置setOnClickListener,然后在onClick中再调用一次对外封装的接口,将这个事件传递给外面的调用者。...()); } } 意上面调用接口的onItemClick()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item相关的数据 @Override
因为RecyclerView没有点击、长按事件,需要自己写 实现的方式比较多,可以通过adapter中自己去提供回调 废话不多说,直接看代码: public class GalleryAdapter...{ void onItemClick(View view, int position);//点击事件 } /** * 单击 点击监听事件变量 */ private OnItemClickLitener...void onClick(View v) { //设置点击事件 具体的调用执行,由当前的adapter实例进行操作 mOnItemClickLitener.onItemClick(viewHolder.itemView..., i); } }); } } } 在对应的activity中adapter实例调用点击事件: mAdapter.setOnItemClickLitener(...mAdapter.removeData(position); } }); 该处代码只展示了 点击事件,长按事件是一样的做法,无非就是多一个方法了
必须要重写的方法 * 构造函数,在这里设置 调用 ScrollListener的滚动事件 */ public MyRecyclerView(Context context, AttributeSet...public interface OnItemClickLitener { void onItemClick(View view, int position);//点击事件 } /** * 单击...void onClick(View v) { //设置点击事件 具体的调用执行,由当前的adapter实例进行操作 mOnItemClickLitener.onItemClick(viewHolder.itemView...需要学习的第二个知识点就是:在对应的activity中关于RecyclerView 的使用 RecyclerView的使用代码: //找到对应的视图控件 mRecyclerView = (MyRecyclerView...那么就必须解释下RecyclerView的这个名字了,从它类名上看,RecyclerView代表的意义是,我只管Recycler View,也就是说RecyclerView只管回收与复用View,其他的你可以自己去设置
在这个demo中,一开始页面是没有数据的,当我们在Activity中调用ViewModel的loadUserInfo后,dataBinding会把我们设置的假数据更新到ui上。...UserInfoActivity 下面再回到Activity,看Activity是怎么调用ViewModel的。...调用了set方法之后,View视图层就和ViewModel层绑定了。...,先看下Activity里是怎么设置RecyclerView的。...这个方法上加上一个注解@BindingAdapter({"img:imgurl", "img:placeholder", "img:error"}),注解里面有三个参数,分别表示图片url,占位图,错误图
这可以是本地数据库或API调用。那么使用分页是有意义的。如果您从数据库中提取数据,请分批请求数据(每个请求20个)。同样的情况也适用于API调用。...④ Adapter的辅助方法 将以下方法添加到PaginationAdapter中。它们对于通过分页获取的添加数据很有用。...PaginationAdapter中的addAll()方法完成了此操作。...使用Paginati onScrollListener 请注意PaginationScrollListener如何使用我们Activity中定义的标志。...TOTAL_PAGES) adapter.addLoadingFooter(); // 5 else isLastPage = true; } 最终结果 根据我们的代码设置,我们每页加载10个虚拟内容
截取某个Activity或Fragment 在Android中,如果你想要截取某个Activity或Fragment的页面内容并保存成图片,可以通过以下方法实现: 1、 截取整个Activity的屏幕:...你可以获取当前Activity的根视图(decorView),然后利用setDrawingCacheEnabled(true)和buildDrawingCache()方法来启用视图的绘制缓存,并创建一个...2、 截取特定控件或区域: 如果你只需要截取Activity中的某个特定控件或区域,可以对该控件调用相同的方法。...2、 计算RecyclerView的总高度: 通过遍历RecyclerView的每个Item,测量它们的高度并累加起来,以确定RecyclerView的总高度。...3、 滚动RecyclerView: 使用scrollTo()或scrollBy()方法将RecyclerView滚动到顶部,然后逐屏截取内容,直到覆盖整个RecyclerView的高度。
Activity来显示RecyclerView,笔者这里选择的是新建一个Activity来显示RecyclerView: 因为RecyclerView是在android5.0版本新增在support.v7...好了我们还要知道,RecyclerView控件的适配器必须继承于RecyclerView.Adapter 类并且重写其中的抽象方法,那么我们新建一个适配器类用来适配要在...,用于创建MyHolder对象作为RecyclerView的显示子项 * 每个 RecyclerView 控件的 item 调用这个方法之后调用 * onBindViewHolder...(); } } 好了,RecyclerView的适配器已经写好了,接下来我们新建一个布局文件recycler_view_activity.xml: 单击别的行也是可以的),成功显示了我们设定的事件信息。
activity; public RecyclerAdapter(Activity activity, List<?...GroupContentViewHolder holder, int flatPosition, ExpandableGroup group) { holder.setGroupName(group); } } 使用方法...Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_expand_recyclerview_layout...); recyclerView = (RecyclerView) findViewById(R.id.recycler_view); mobileOSes = new ArrayList...= new ArrayList(); windowPhones.add(new ChildText("单击游戏")); windowPhones.add(new ChildText
RecyclerView继承了ViewGroup,并重写了measureChild(),该方法在onMeasure()中被调用,用来计算每个child的大小,计算每个child大小的时候就需要加上getItemOffsets...RecyclerView重写的draw()方法,随后super.draw()即调用View的draw(),该方法会先调用onDraw()(这个方法在RecyclerView重写了),再调用dispatchDraw...在RecyclerView的onDraw()方法中会得到分割线的数目,并循环调用其onDraw()方法,我们再来看分割线实例DividerItemDecoration的onDraw()方法 @Override...= null) {//如果以viewType为key获取的View为null //创建ViewHolder并返回 ViewHolder holder = new...,该方法返回ViewHolder,我们在其中为头部以及底部布局单独创建ViewHolder,对于普通的item,我们依然调用内部的mInnerAdapter的onCreateViewHolder方法 创建好
一、DataBinding简介 在传统的Android应用开发中,布局文件通常只负责应用界面的布局工作,如果需要实现页面交互就需要调用setContentView()将Activity、fragment...生成Binding类的名字很特殊,它与XML布局文件的名字有对应关系,具体的联系就是,以XML布局文件为准,去掉下划线,所有单次以大驼峰的形式按顺序拼接,最后再加上Binding。...2.3 绑定布局 没有使用DataBinding的时候,为了将XML布局文件与Activity进行绑定,需要调用Activity的setContentView()方法,或者是在Fragment中调用LayoutInflate...布局表达式不仅可以传入对象的属性,也可以调用对象的方法。首先创建一个工具类,在类中定义响应事件的方法,如下所示。...static方法,并且每个方法都使用了@BindingAdapter注解,注解中声明所操作的View属性,当使用了DataBinding的布局文件被渲染时,属性所对应的static方法就会自动调用。
之前在学习ListView的时候如果数据改变,需要调用notifyDataSetChanged()方法来刷新数据,而在RecyclerView中当数据改变时分别调用notifyItemChanged、notifyItemInserted...和notifyItemRemoved方法来更新页面数据。...接下来通过一个案例来学习如何动态更新数据,当单击某个item时则在其下方插入一个item,如果长压某个item时则删除对应item。...,当我们插入数据或者删除item的时候,item的位置并没有发生改变或产生位置错乱,需要重新调用notifyDataSetChanged方法,虽然问题得到了解决,但是又会产生新的问题,就是RecyclerView...其实RecyclerView还提供了几个局部刷新的方法,只需要在删除或插入数据的同时,再刷新改变位置item下方的所有Item的位置即可。
,第一个参数是调用者本身,即ImageView,第二第三个参数是布局文件在调用该方法时传入的参数,代码如下: public class ImageViewBindingAdapter { @BindingAdapter...而Setter方法会在用户编辑EditText中的内容时,被自动调用,我们需要在该方法中对username进行手动更新。...观察者在收到通知后,会对setter方法进行调用。因此,如果你没有对新值进行判断,就会引发循环调用的问题。 第三步,设置布局变量。...首先我们的类必须继承自BaseObservable,另外,在getter方法上还要加上@Bindable注解,最后还要在Setter方法中手动调用notifyPropertyChanged()方法通知观察者...后面的设局布局变量和完成双向绑定和之前的方法一样,就不贴代码了。 七.RecyclerView的绑定机制 第一步,编写RecyclerView的布局文件: <?
requires the FLAG_ACTIVITY_NEW_TASK flag...,service类增添了不少自身特有的方法,而在Internal API中,在attach()方法中attachBaseContext(context)就是调用的父类ContextWrapper中的方法...Context的实现类ContextImpl或其子类的方法,这就是同一基类扩展出来的装饰者内部通过一个被装饰者的引用调用其方法,从而丰富被装饰者功能的装饰者模式了。...(Intent intent)方法,虽然在Service中没有该方法,但调用的其实是父类ContextWrapper中的startActivity(Intent intent),该方法如下:...的一个实例;而在ContentProvider中你可以调用getContext方法获取到一个Context对象,这些COntext都直接或间接来自于Application、Activity和Service
(1)新建布局文件,在SwipeRefreshLayout中插入一个RecyclerView。..." android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin...的Adapter类CatNamesRecyclerViewAdapter,其中方法refreshContent是用来混淆mCatNames的,当做是内容刷新之后的结果。...mSwipeRefreshLayout.setRefreshing(false); } }, 5000); } } 其中方法...setColorSchemeResources是用来改变进度圈的颜色的,setOnRefreshListener是用来添加我们下拉刷新的具体操作的监听器的,这里是虚拟地去加载了新数据。
上面几个方法基本就是Activity对应生命周期回调方法的一个调用传递,后面会在“Fragment生命周期”中详细介绍各个回调方法的用途,接下来就看看如何在Activity中使用Fragment。...此时只会以代码的方式添加它到Activity,并且使用的是FragmentTransaction.add(Fragment fragment, String tag)方法,此时fragment实例不需要...因为界面组件的属性,Fragment具备像Activity那样的生命周期回调方法,大多数方法本身就是Activity对应方法的一个调用传递,另一些方法是和Fragment的界面生成相关,或和宿主Activity...Activity关联时调用,方法参数就是关联的Activity。...()方法是Activity.onCreate()执行完毕后调用,可以在那里做一些Activity创建完成后的初始化操作。
应聘者:Android 使用的是 DVM ( Dalvik 虚拟机)而不是 JVM ( Java 虚拟机)。 面试官:不错,答上来了! 4、面试官:Gradle 中的 BuildType 是什么?...在 Activity 生命周期中,无论是在应用程序启动时,还是在Activity 被销毁然后重新创建(例如在配置更改期间)时,都会调用一次 onCreate() 方法。...只要 Activity 对用户可见(通常在 onCreate() 或 onRestart() 之后),就会调用 onStart() 方法。...应聘者:旋转屏幕时,当前的 Activity 实例将被破坏,并以新的方向创建Activity的新实例。旋转屏幕时,由于屏幕旋转时会重新创建布局,将首先调用onCreate() 方法。...RecyclerView 在显示较长的项目列表。假设我们要显示100行项目。一种简单的方法是只创建100个视图,每行一个视图,然后将它们全部布局。
所以我们只要用判断item中布局的种类,然后调用itemView的of或者set方法,就能对列表item的布局进行选择。...中调用了adapter的几个对应的刷新的方法。...2.如果为false,那么该item没有被初始化过,那么就会调用父类方法,而父类中就是调用另一个重载方法,这个方法我们接下来要讲。...一般的方法是在Activity中设置这些view的监听器,然后通过variable这个标签在xml中引入。...2.ViewModel中到底需不需要传入Context,我认为是需要的,原因有一下两点: 1.很多情况下在ViewModel中直接使用Activity比兜转半天回到Activity中调用方法,直观许多逻辑也清晰许多
领取专属 10元无门槛券
手把手带您无忧上云