ListView滑动监听和设置点击事件

viewholder_item.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent">
 6
 7
 8
 9     <ImageView
10         android:id="@+id/iv"
11         android:layout_width="wrap_content"
12         android:layout_height="wrap_content" />
13
14     <TextView
15         android:id="@+id/tv"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content" />
18 </LinearLayout>

ViewHolderAdapter.java

 1 package sowell.oracle.com.listviewholder;
 2
 3 import android.content.Context;
 4 import android.view.LayoutInflater;
 5 import android.view.View;
 6 import android.view.ViewGroup;
 7 import android.widget.BaseAdapter;
 8 import android.widget.ImageView;
 9 import android.widget.TextView;
10 import android.widget.Toast;
11
12 import java.util.List;
13
14 /**
15  * Created by 94965 on 2017/11/11.
16  */
17
18 public class ViewHolderAdapter extends BaseAdapter {
19
20     private List<String> mData;             //储存数据
21     private LayoutInflater mInflater;      //实例化布局
22     public Context context;
23
24     public ViewHolderAdapter(Context context,List<String> data){
25         super();
26         this.context=context;
27         this.mData=data;
28         mInflater=LayoutInflater.from(context);
29     }
30
31
32
33     @Override
34     public int getCount() {
35         return mData.size();
36     }
37
38     @Override
39     public Object getItem(int position) {
40         return mData.get(position);
41     }
42
43     @Override
44     public long getItemId(int position) {
45         return position;
46     }
47
48     @Override
49     public View getView(final int position, View convertView, final ViewGroup parent) {
50         ViewHolder holder=null;
51         //判断是否缓存
52         if(convertView==null){
53             holder=new ViewHolder();
54             //通过LayoutInflater实例化布局
55             convertView=mInflater.inflate(R.layout.viewholder_item,null);
56             holder.img=(ImageView)convertView.findViewById(R.id.iv);
57             holder.title=(TextView)convertView.findViewById(R.id.tv);
58             holder.img.setOnClickListener(new View.OnClickListener() {
59                 @Override
60                 public void onClick(View v) {
61                     //对item中的imageview设置点击事件
62                     Toast.makeText(context,"第"+(position+1)+"张图片被点击",Toast.LENGTH_SHORT).show();
63                 }
64             });
65             convertView.setTag(holder);
66         }else {
67             //通过tag找到缓存‘的布局
68             holder=(ViewHolder)convertView.getTag();
69         }
70
71         //设置布局中控件要显示的视图
72         holder.img.setBackgroundResource(R.mipmap.ic_launcher);
73         holder.title.setText(mData.get(position));
74         return convertView;
75     }
76
77
78
79     public final class ViewHolder{
80         public ImageView img;
81         public TextView title;
82     }
83 }

activity_main.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="wrap_content"
 6     android:orientation="vertical"
 7     tools:context="sowell.oracle.com.listviewholder.MainActivity">
 8
 9
10
11
12     <ListView
13         android:id="@+id/lv"
14         android:layout_width="match_parent"
15         android:layout_height="450dp"
16         android:divider="@android:color/darker_gray"
17         android:dividerHeight="1dp"
18         >
19     </ListView>
20
21
22
23
24     <Button
25         android:id="@+id/btn"
26         android:layout_width="match_parent"
27         android:layout_height="wrap_content"
28         android:text="add" />
29
30
31     <LinearLayout
32         android:layout_width="match_parent"
33         android:layout_height="wrap_content"
34         android:orientation="horizontal"
35         >
36         <EditText
37             android:id="@+id/et"
38             android:layout_weight="1"
39             android:layout_width="wrap_content"
40             android:layout_height="wrap_content" />
41         <Button
42             android:id="@+id/btn1"
43             android:layout_weight="1"
44             android:onClick="moveto"
45             android:text="移动"
46             android:layout_width="wrap_content"
47             android:layout_height="wrap_content" />
48     </LinearLayout>
49
50
51 </LinearLayout>

MainActivity.java

  1 package sowell.oracle.com.listviewholder;
  2
  3 import android.support.v7.app.AppCompatActivity;
  4 import android.os.Bundle;
  5 import android.util.Log;
  6 import android.view.MotionEvent;
  7 import android.view.View;
  8 import android.view.WindowManager;
  9 import android.widget.AbsListView;
 10 import android.widget.AdapterView;
 11 import android.widget.Button;
 12 import android.widget.EditText;
 13 import android.widget.ListView;
 14 import android.widget.Toast;
 15
 16 import java.util.ArrayList;
 17 import java.util.List;
 18
 19 public class MainActivity extends AppCompatActivity {
 20
 21     public ListView listView;
 22     public ViewHolderAdapter adapter;
 23     public List<String> list;
 24     public String string;
 25     public Button bt;
 26     public Button move;
 27     private EditText et;
 28     public void init(){
 29
 30         move=(Button)findViewById(R.id.btn1);
 31         et=(EditText)findViewById(R.id.et);
 32         bt=(Button)findViewById(R.id.btn);
 33         bt.setOnClickListener(new View.OnClickListener() {
 34             @Override
 35             public void onClick(View v) {
 36                 add();
 37             }
 38         });
 39         list=new ArrayList<String>();
 40         for(int i=0;i<=20;i++)
 41         {
 42             string=""+i;
 43             list.add(string);
 44         }
 45         adapter=new ViewHolderAdapter(this,list);
 46         listView=(ListView)findViewById(R.id.lv);
 47         listView.setAdapter(adapter);
 48         listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 49             @Override
 50             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 51                 //对整个item设置点击事件
 52                 String s=list.get(position);
 53                 Toast.makeText(MainActivity.this,"第"+(position+1)+"个item被点击",Toast.LENGTH_SHORT).show();
 54             }
 55         });
 56         listView.setOnTouchListener(new View.OnTouchListener() {
 57             @Override
 58             public boolean onTouch(View v, MotionEvent event) {
 59                 switch (event.getAction()) {
 60                     case MotionEvent.ACTION_DOWN:
 61                         Toast.makeText(MainActivity.this, "ACTION_DOWN", Toast.LENGTH_SHORT).show();
 62                         break;
 63
 64                     case MotionEvent.ACTION_MOVE:
 65                         Toast.makeText(MainActivity.this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();
 66                         break;
 67
 68                     case MotionEvent.ACTION_UP:
 69                         Toast.makeText(MainActivity.this, "ACTION_UP", Toast.LENGTH_SHORT).show();
 70                         break;
 71                 }
 72                 return false;
 73             }
 74         });
 75
 76         listView.setOnScrollListener(new AbsListView.OnScrollListener() {
 77             @Override
 78             public void onScrollStateChanged(AbsListView view, int scrollState) {
 79                 switch (scrollState){
 80                     case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
 81                         Toast.makeText(MainActivity.this,"滑动停止",Toast.LENGTH_SHORT).show();
 82                         break;
 83
 84                     case SCROLL_STATE_TOUCH_SCROLL:
 85                         Toast.makeText(MainActivity.this,"正在滚动",Toast.LENGTH_SHORT).show();
 86                         break;
 87
 88                     case SCROLL_STATE_FLING:
 89                         Toast.makeText(MainActivity.this,"惯性继续滚动",Toast.LENGTH_SHORT).show();
 90                         break;
 91                 }
 92             }
 93
 94             @Override
 95             public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
 96                 Toast.makeText(MainActivity.this,""+firstVisibleItem,Toast.LENGTH_SHORT).show();
 97             }
 98         });
 99     }
100
101
102     @Override
103     protected void onCreate(Bundle savedInstanceState) {
104         super.onCreate(savedInstanceState);
105         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); //防止被输入框被遮盖
106         setContentView(R.layout.activity_main);
107         init();
108     }
109
110     public void moveto(View view){
111         int position=Integer.parseInt(et.getText().toString());
112         if(position>=0&&position<=list.size()-1)
113             listView.smoothScrollByOffset(position);//平滑移动到布局第一个元素为position
114             //listView.smoothScrollToPosition(position);
115     }
116
117     public void add(){
118         list.add("new");
119         adapter.notifyDataSetChanged();     //动态添加listview中的数据
120         //listView.setSelection(list.size()-1);//瞬间移动
121         listView.smoothScrollToPosition(list.size()-1);//平滑移动到布局中有该位置
122
123     }
124
125
126
127 }
时间: 2024-10-10 15:22:36

ListView滑动监听和设置点击事件的相关文章

android基础之如何实现触屏监听和鼠标点击事件

直接上代码: android基础之如何实现触屏监听和鼠标点击事件

百度地图2.4.1SDK监听覆盖物的点击事件

最近做项目用的是老版本的百度地图SDK,其中有一个需求是监听普通覆盖物的点击事件,由于这个版本不存在所谓的Marker,普通的覆盖物都是自己写一个类继承 ItemizedOverlay<OverlayItem>.监听点击事件更加麻烦,需要覆盖ItemizedOverlay里面的onTap方法,但是有2个onTap方法,应该覆盖参数是一个(int index)的onTap方法,因为另一个只要是点击地图就会调用,无论点击哪里都是这样,这也不知道为什么. protected boolean onTa

Android 监听按钮的点击事件

onClick事件1.Button和ImageButton都拥有一个onClick事件 通过自身的.setOnClickListener(OnClickListener)方法添加点击事件2.所有的控件都有一个onclick事件 不仅仅Button和ImageButton拥有3.通过点击事件的监听可以实现点击按钮之后要发生什么动作 监听事件实现的集中写法1.匿名内部类的实现2.独立类的实现3.实现接口的方式来实现 package com.example.buttonimagebutton; imp

监听按钮的点击事件的三种实现方式

1.匿名内部类监听按钮点击事件 Button buttonup=(Button)findViewById(R.id.btn_signup); //找到需要的Button按钮,转换成Button类型 buttonin.setOnClickListener(new View.OnClickListener() { //设置Button的监听器 @Override public void onClick(View v) { Toast.makeText(MainActivity.this,"点击了登录

自己写的SeekBarPreference,可以实现seekbar滑动监听和设置默认进度和最大进度

我通过参考android源码,把这个烂尾的类写完了.具体实现了seekbar的数据自动存储,seekbar拖动时触发监听器,可以设置默认的进度和最大进度.先说使用的方式: 1.在xml文件中使用preference <com.kale.floatbar.preference.MySeekBarPreference android:key="alpha" android:layout="@layout/prefs_list_item" android:title

监听grid行点击事件

使用swipecard实现卡片视图左右滑动监听以及点击监听

前言: 大家好,今天给大家介绍安卓一种特别实用有很酷炫的组件swipecard,当然这并不是安卓爸爸创造的,这是国内的一个我认为是大牛的一个人随便写着玩儿搞出来了,我看了他的代码介绍已经很清晰了,但是对于刚入门学安卓的同学们来说理解还是得需要一定的时间,于是在这里我就给大家把他的代码给精简一下步骤,希望能给大家一些帮助. (图片无法上传所以导致图片不可见,大家可以点击我的有道链接查看 http://note.youdao.com/noteshare?id=ef7292c53d507cd0e1f3

Android 小问题整理1 ViewPagerIndicator和ViewPager的滑动监听

2015-10-30 今天使用ViewPagerIndicator时遇到个小问题,使用ViewPagerIndicator和ViewPager关联之后,再对ViewPager的滑动事件进行监听viewpager.setOnPageChangeListener(),然后监听失效了. 1 mViewPager.setAdapter(new MyAdapter()); 2 mIndicator.setViewPager(mViewPager);//关联ViewpagerIndicator和ViewPa

自定义ScrollView,实现ScrollView滑动监听并记录滑动位置。

Android自带的ScrollView对于滑动监听接口没有开放,然而在许多时候记录ScrollView的滑动位置,实现这个功能比较简单,自己实现一个ObserveScrollView类来继承ScrollView,然后重写里面的onScrollChanged(int l, int t, int oldl, int oldt)方法,本方法就是ScrollView的滑动监听,接着声明一个接口,在重写的方法里利用接口回调,将滑动的数据传出去. onScrollChanged(int l, int t,