Android列表组件ListView使用详解之屏幕触摸事件
发布日期:2021-06-29 04:23:00 浏览次数:2 分类:技术文章

本文共 5910 字,大约阅读时间需要 19 分钟。

给ListView组件添加触摸事件监听,常用的有ACTION_DOWN、ACTION_MOVE和ACTION_UP事件:

@Override    public boolean onTouch(View v, MotionEvent event) {        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN://触摸屏幕时,只执行一次                Log.i(TAG, "执行触摸时的操作");                break;            case MotionEvent.ACTION_MOVE://触摸到屏幕时,反复执行                Log.i(TAG, "执行移动时的操作");                break;            case MotionEvent.ACTION_UP://离开屏幕时,只执行一次                Log.i(TAG, "执行触摸离开时的操作");                break;        }        return false;    }

在不同的触摸事件中,执行相关的逻辑操作。关键代码:

testLv.setOnTouchListener(this);//设置ListView组件的触摸事件

当前类实现了View.OntouchListener接口。

完整代码:

package net.oschina.git.zhaikun.androiddeveloped.activitys;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.Button;import android.widget.ListView;import net.oschina.git.zhaikun.androiddeveloped.R;import net.oschina.git.zhaikun.androiddeveloped.adapter.ListViewDemoAdapter;import java.util.ArrayList;import java.util.List;/** * Created by zhaikun68 on 2018/3/5. * 

* ListView演示Demo */public class ListViewDemoActivity extends AppCompatActivity implements View.OnClickListener, View.OnTouchListener { private static final String TAG = "ListViewDemoActivity";//日志打印标记 private ListView testLv;//ListView组件 private Button updateDataBtn;//动态加载数据组件 private List

dataList = new ArrayList<>();//存储数据 private ListViewDemoAdapter listViewDemoAdapter;//ListView的数据适配器 @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listview_demo); initView();//初始化组件 initData();//初始化数据 } /** * 初始化组件 */ private void initView() { testLv = (ListView) findViewById(R.id.test_lv); updateDataBtn = (Button) findViewById(R.id.update_data_btn); updateDataBtn.setOnClickListener(this);//动态加载数据组件的点击事件 testLv.setOnTouchListener(this);//设置ListView组件的触摸事件 } /** * 初始化数据 */ private void initData() { //初始化10项数据 for (int i = 1; i <= 20; i++) { dataList.add("显示内容" + i); } //设置ListView的适配器 listViewDemoAdapter = new ListViewDemoAdapter(this, dataList); testLv.setAdapter(listViewDemoAdapter); testLv.setSelection(4); //数据为空时显示的提示信息 testLv.setEmptyView(findViewById(R.id.empty_tv)); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.update_data_btn://动态加载列表数据 dataList.add("动态加载的数据项"); //通知ListView更改数据源 if (listViewDemoAdapter != null) { listViewDemoAdapter.notifyDataSetChanged(); testLv.setSelection(dataList.size() - 1);//设置显示列表的最后一项 } else { listViewDemoAdapter = new ListViewDemoAdapter(this, dataList); testLv.setAdapter(listViewDemoAdapter); testLv.setSelection(dataList.size() - 1); } break; } } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN://触摸屏幕时,只执行一次 Log.i(TAG, "执行触摸时的操作"); break; case MotionEvent.ACTION_MOVE://触摸到屏幕时,反复执行 Log.i(TAG, "执行移动时的操作"); break; case MotionEvent.ACTION_UP://离开屏幕时,只执行一次 Log.i(TAG, "执行触摸离开时的操作"); break; } return false; }}

布局文件:

列表数据适配器代码:

package net.oschina.git.zhaikun.androiddeveloped.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import net.oschina.git.zhaikun.androiddeveloped.R;import java.util.List;/** * Created by zhaikun68 on 2018/3/5. * 

* ListView演示Demo中的数据适配器 */public class ListViewDemoAdapter extends BaseAdapter { private Context context;//上下文对象 private List

dataList;//ListView显示的数据 /** * 构造器 * * @param context 上下文对象 * @param dataList 数据 */ public ListViewDemoAdapter(Context context, List
dataList) { this.context = context; this.dataList = dataList; } @Override public int getCount() { return dataList == null ? 0 : dataList.size(); } @Override public Object getItem(int position) { return dataList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; //判断是否有缓存 if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.item_listview_demo, null); viewHolder = new ViewHolder(convertView); convertView.setTag(viewHolder); } else { //得到缓存的布局 viewHolder = (ViewHolder) convertView.getTag(); } //设置图片 viewHolder.pictureImg.setImageResource(R.mipmap.ic_launcher); //设置内容 viewHolder.contentTv.setText(dataList.get(position)); return convertView; } /** * ViewHolder类 */ private final class ViewHolder { ImageView pictureImg;//图片 TextView contentTv;//内容 /** * 构造器 * * @param view 视图组件(ListView的子项视图) */ ViewHolder(View view) { pictureImg = (ImageView) view.findViewById(R.id.picture_img); contentTv = (TextView) view.findViewById(R.id.content_tv); } }}

列表子项布局文件:

 

转载地址:https://blog.csdn.net/ZhaiKun68/article/details/79469849 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android列表组件ListView使用详解之滑动事件监听
下一篇:Android列表组件ListView使用详解之数据为空提示信息

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月05日 11时57分15秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

如何找回丢失的比特币 2019-04-29
日本交易所Zaif因黑客攻击损失近6000万美元 2019-04-29
以太坊智能合约如何运作? 2019-04-29
赛迪全球公链指数第5期名单:EOS、ETH排名不变 比特股首进前3 2019-04-29
能依靠0.21个比特币生存21天吗 2019-04-29
比特币核心发现网络漏洞CVE-2018-17144 社区敦促所有节点尽快升级补丁 2019-04-29
泰达币对比特币价格的影响不具有统计意义 2019-04-29
Atitit nlp自然语言处理类库(java python nodejs c#net) 目录 1.1. Python snownlp 1 1.2. NLP.js一个nodejs/javascri 2019-04-29
Atitit nlp用到的技术与功能自然语言处理 v3 t99.docx Atitit nlp用到的技术与常见类库 目录 1. 常用的技术 1 1.1. 语言处理基础技术 分词 相似度等 1 1.2 2019-04-29
Atitit 2000drmmr v2 t05.docx Atitit 2000drmmr v1 t99 2000.1.26 hs,yweywe jla n dashw ner kl .na ni 2019-04-29
常见方案 目录 1. 发现目前 WEB 上主流的视频直播方案有 HLS 和 RTMP, 1 2. 实现直播的方法有很多,但是常用的,就这几个。 3个直播协议:rtmp、rtsp、hls。 和三个端: 2019-04-29
Atitit 直播问题总结ffmpeg 目录 1.1. 屏幕太大,可以使用-s调整分辨率 1 1.2. Full size 1 1.3. 流畅度调整 1 2. 1 2.1. 没有录音 1 2.2. 2019-04-29
paip.索引优化---sql distict—order by 法 2019-04-29
paip.输入法编程---带ord gudin去重复- 2019-04-29
paip.输入法编程---增加码表类型 2019-04-29
paip.cpu占用高解决方案---ThreadMast 跟Process Lasso的使用 2019-04-29
paip.提升性能--- mysql 建立索引 删除索引 很慢的解决. 2019-04-29
paip.输入法编程---智能动态上屏码儿长调整--.txt 2019-04-29
Atitit sumdoc t0 final index D:\BaiduNetdiskDownload\sumdoc t0 final\sumdoc t0 wps cld bek D:\Baid 2019-04-29
Atitit sumdoc t0 final index D:\BaiduNetdiskDownload\sumdoc t0 final\sumdoc t0 wps cld bek D:\Baid 2019-04-29