配置用法
<data>
<variable name="adapter" type="RecyclerView.Adapter"/>
</data>
<RecyclerView
adapter="@{adapter}"
app:layoutManager="LinearLayoutManager"
tools:itemCount="5"
tools:listItem="@layout/list_item"
/>
嵌套滑动
setNestedScrollingEnabled 是 Android 中用于控制一个视图(View)是否启用嵌套滑动(Nested Scrolling)功能的方法。
核心作用
- 启用/禁用嵌套滑动机制:当设置为
true时,该视图可以作为“嵌套滑动子视图”(NestedScrollingChild),与支持嵌套滑动的父容器(如NestedScrollView、CoordinatorLayout等)协同处理滑动事件。 - 解决滑动冲突:在嵌套滚动场景(例如
RecyclerView嵌套在ScrollView或NestedScrollView中)时,合理使用此方法可避免滑动卡顿或行为异常。
常见使用场景
-
RecyclerView嵌套在NestedScrollView中
默认情况下,RecyclerView的isNestedScrollingEnabled为true会导致它自己处理滑动,造成与外层容器冲突。此时应设为false:recyclerView.setNestedScrollingEnabled(false); -
自定义 View 实现复杂滑动逻辑
若需自定义 嵌套View 参与嵌套滑动流程(如顶部吸顶、分层滚动等),需实NestedScrollingChild接口并调用:helper = new NestedScrollingChildHelper(this); helper.setNestedScrollingEnabled(true);
关键要点
- 默认值:
RecyclerView默认启用嵌套滑动(即true)。 - API 兼容性:嵌套滑动机制从 Android 5.0(API 21) 开始支持。
- 性能影响:在复杂布局中合理关闭不必要的嵌套滑动可提升滚动流畅度。
相关方法
isNestedScrollingEnabled():判断当前是否启用嵌套滑动。startNestedScroll(int axes):主动发起嵌套滑动请求。dispatchNestedPreScroll()/dispatchNestedScroll():分发滑动事件给父/子视图。
app命名空间可以省略写?
1. 基本使用方法
ListView 是 AdapterView的子类,AdapterView.OnItemClickListener、AdapterView.OnItemSelectedListener 这些关乎Item的操作都是在AdapterView中就有的抽象。
ListView 只是在此基础上加了一些其他的功能,比如:addFooterView、addHeaderView 等,
//使用示例
ListView listView=new ListView(context);
listView.setCacheColorHint(0);//滚动时透明
Drawable color=new ColorDrawable(0xFFFFFFFF); //或使用Color.parseColor("#FFFFFF"),若使用0x00FFFFFF显示不出来。
listView.setDivider(color);//设置分割线
listView.setDividerHeight(1);
xml配置:
<ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:divider="#FFF" android:dividerHeight="1px" android:layout_margin="10dip"/>
2.Adapter介绍 http://code.google.com/p/androidlearn/wiki/Adapter
ArrayAdapter是一个绑定View到一组对象的通用类。默认情况下,ArrayAdapter绑定每个对象的toString值到在layout中预先定义的TextView控件上。 可变通的,构造函数允许你使用更加复杂的layout或者通过重写getView方法来扩展类从而使用TextView的替代物(如ImageView或嵌套的layout)。
The android.R.layout.simple_list_item_1.xml Android example source code
重写Adapter类需要实现的方法 http://code.google.com/p/androidlearn/wiki/Adapter_custom
需要重写Adapter类的四个方法
public int getCount();
public Object getItem(int position);
public long getItemId(int position);
public View getView(int position, View convertView, ViewGroup parent);
3.过滤
listView.setTextFilterEnabled(true);
listView.setFilterText("a");
会显示出一个过滤后的新的ListView层
Android的数据过滤机制 http://winuxxan.blog.51cto.com/2779763/509931
4.多选
ListView 可以以多种样式展现,比如多选式设置 ArrayAdapter<T>() 的第二个参数为 android.R.layout.simple_list_item_multiple_choice,但此时的列表项被选中后并不会出现“绿勾”,还需 ListView的 setChoiceMode(ListView.CHOICE_MODE_MULTIPLE) 方法辅助。
取多选的结果
SparseBooleanArray sparseBooleanArray=listView.getCheckedItemPositions();
int size=sparseBooleanArray.size();
for(int i=0;i<size;i++)
{
int index=sparseBooleanArray.keyAt(i);
//如果选中后中再去掉选择,这个项仍被选中了,在这里需要再次判断
if(listView.getCheckedItemPositions().get(index))
{
.....
}
}
5.刷新
BaseAdapter.notifyDataSetChanged();
6.ArrayAdapter
例 ArrayAdapter<Object> listViewAdapter=new ArrayAdapter<Object>(this,android.R.layout.simple_list_item_1,objList);
listView.setAdapter(listViewAdapter);
7.快速滑动效果,在开始普通滚动列表后,滑动控制块出现。
listView.setFastScrollEnabled(true);//就这么简单
8.addHeaderView
1.addHeaderView在setAdapter之前调用,2.HeaderView不要设置setLayoutParams, 3.onClick的position
EditText editText=new EditText(this);
editText.setText("abc");
listView.addHeaderView(editText);
9.
本文详细介绍了ListView的基本使用方法、Adapter的实现、过滤、多选、刷新等功能,并提供了XML配置示例,帮助开发者深入理解并高效应用ListView组件。

461

被折叠的 条评论
为什么被折叠?



