RecyclerView

本文详细介绍了ListView的基本使用方法、Adapter的实现、过滤、多选、刷新等功能,并提供了XML配置示例,帮助开发者深入理解并高效应用ListView组件。

配置用法

<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),与支持嵌套滑动的父容器(如 NestedScrollViewCoordinatorLayout 等)协同处理滑动事件。
  • 解决滑动冲突‌:在嵌套滚动场景(例如 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

     http://www.devdaily.com/java/jwarehouse/android-examples/platforms/android-2/data/res/layout/simple_list_item_1.xml.shtml

重写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) 方法辅助。

   http://www.i1987.org/?p=242

  取多选的结果  

 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.
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值