第一行代码 读笔③ (Layout ListView)

软件也要拼脸蛋,UI开发的点点滴滴
第三章:常见控件,4种基本布局,自定义控件,LIstView,单位和尺寸,编写界面的实践

常见控件:7大常见控件,并没有太多需要说的,多加练习,熟悉即可。

4种基本布局

  • LinearLayout(线性布局):控件在线性方向上依次排列,通过设置orientation可分为垂直排列或水平排列元素方式。

  • RelativeLayout(相对布局):按组件相互之间的相对位置来确定,需要添加相对属性来控制视图显示在窗口的位置。

(嵌套布局:线性布局与相对布局的嵌套组合而成的布局)

  • TableLayout(表格布局):以表格的方式排列控件。TableLayout是顶级元素,说明采用的是表格布局。TableRow定义一个行。TextView定义一个单元格的内容。

  • FrameLayout(帧布局):书上只提到了是没有任何定位方式的布局,都摆放在布局左上角。Google得帧布局中的每一组件都代表一个画面,按组件定义的先后顺序依次显示,后面出现的会覆盖前面的画面,这个布局可以实现动画效果。

自定义控件:书上写了一种通过组合现有控件的方式自定义控件。但在其他书上看到,还有继承,自绘等方式,详细说起来很复杂,现在也只有一定了解……..以后在详细的记录方法……

ListView:最为常用(最难用?)的控件。
必须的3元素:

  • ListVeiw 用来展示列表的View。

  • 适配器(adapter: 用来把数据映射到ListView上的中介。

    不同类型的适配器:

    • ArrayAdapter:最为简单,只能展示一行字。
    • SimpleAdapter:有最好的扩充性,可以自定义出各种效果。
    • SimpleCursorAdapter:SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
  • 数据 :list具体的将被映射的字符串,图片,或者基本组件。

个人理解:VIew提供了显示的位置。list内存有供使用的数据。adapter将两者联系起来,从而显示出ListView。

ListView的定制
个人看来就是对于3元素的定制。

对于list数据的定制,按照自身的需要,定义一个实体类,作为LisView适配器的适配类型。

对于ListView的定制,为对于每一个显示子项的定制,指定一个我们自定义的布局。(在原ListView中是默认的Item格式)。

对于Adapter的定制,先是重写父类构造函数,传入context,Id,数据。再重写getView(),通过getView得到滚动到屏幕内的子项,通过getItem()得到当前项实例,通过LayoutInflater为其加载我们定制的布局,调用相应方法,显示我们的内容。

ListView的点击事件
先是对于整个ListView注册监听器,ListView.setOnItemClickListenceer。再是对于onItemClick的重写,根据传入的position,定位具体实例,就可以得到对于每一个item的点击事情的处理了。

ListView的优化

具体过程的详细解释

书上例子的实现

编写界面的实践
书上例子的实现

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 listview 循环滚动的示例代码,已经添加了注释解释每个步骤的作用。 ```java public class MainActivity extends AppCompatActivity { private ListView mListView; private List<String> mDataList; private ArrayAdapter<String> mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化数据列表 initDataList(); // 初始化 ListView mListView = findViewById(R.id.list_view); mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mDataList); mListView.setAdapter(mAdapter); // 监听 ListView 滚动事件 mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // 判断是否已经滚动到最后一个条目 if (firstVisibleItem + visibleItemCount == totalItemCount) { // 获取最后一个可见条目 View lastVisibleItemView = mListView.getChildAt(mListView.getChildCount() - 1); if (lastVisibleItemView != null && lastVisibleItemView.getBottom() == mListView.getHeight()) { // 如果最后一个可见条目已经完全显示,就将第一个条目移到最后一个条目后面,实现循环滚动 String firstItem = mDataList.get(0); mDataList.remove(0); mDataList.add(firstItem); mAdapter.notifyDataSetChanged(); } } } }); } private void initDataList() { mDataList = new ArrayList<>(); for (int i = 0; i < 20; i++) { mDataList.add("Item " + i); } } } ``` 在上面的代码中,我们首先在 `initDataList()` 方法中初始化了数据列表,然后在 `onCreate()` 方法中将数据列表绑定到 ListView 上,并添加了滚动事件监听器。 在滚动事件监听器的 `onScroll()` 方法中,我们首先判断是否已经滚动到了最后一个条目,如果是,就获取最后一个可见条目,然后判断该条目是否已经完全显示。如果已经完全显示,就将第一个条目移到最后一个条目后面,实现循环滚动。 最后,我们需要调用 `notifyDataSetChanged()` 方法来通知 ListView 数据已经发生了改变,需要重新绘制界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值