ListView-1(包括常用属性和方法)「建议收藏」

ListView-1(包括常用属性和方法)「建议收藏」Spinner-下拉列表在vakues里建立一个arrays.xml文件,为listview提供数据,也可以写在string.xml文件里activity_main.xml布局android:

大家好,又见面了,我是你们的朋友全栈君。

 1 package com.example.listview;  2  3 import java.util.ArrayList;  4 import java.util.HashMap;  5 import java.util.List;  6 import java.util.Map;  7  8 import com.example.listview.R.id;  9 10 import android.app.Activity; 11 import android.os.Bundle; 12 import android.view.Menu; 13 import android.view.MenuItem; 14 import android.view.View; 15 import android.widget.AdapterView; 16 import android.widget.AdapterView.OnItemClickListener; 17 import android.widget.ArrayAdapter; 18 import android.widget.ListView; 19 import android.widget.SimpleAdapter; 20 import android.widget.Toast; 21 22 public class MainActivity extends Activity { 23 24  @Override 25 protected void onCreate(Bundle savedInstanceState) { 26 super.onCreate(savedInstanceState); 27  setContentView(R.layout.activity_main); 28 //例一:子条目为文字 29 /*ListView lv=(ListView) findViewById(id.listView1); 30  String[] ctype={"情景模式","主题模式","手机","程序管理","情景模式","主题模式","手机","程序管理","情景模式","主题模式","手机","程序管理"}; 31  //方法一:指定文件 32 // ArrayAdapter<CharSequence> adapter=ArrayAdapter.createFromResource(this, R.array.list, android.R.layout.simple_list_item_checked); 33  //方法二:指定数组 34  ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_activated_1,ctype); 35  lv.setAdapter(adapter);//将适配器与ListView关联 36  lv.setOnItemClickListener(new OnItemClickListener() { 37 38  @Override 39  public void onItemClick(AdapterView<?> parent, View view, 40  int position, long id) { 41  String string = parent.getItemAtPosition(position).toString();//获取选择项的值 42  Toast.makeText(MainActivity.this, string,Toast.LENGTH_SHORT).show(); 43  } 44  });*/ 45 46 //例二:子条目为图片加文字 47 ListView lv=(ListView) findViewById(R.id.listView1); 48 List<Map<String,Object>> list=new ArrayList<Map<String,Object>>(); 49 Map<String,Object> map=new HashMap<String,Object>(); 50 map.put("name", "张三1"); 51 map.put("image", R.drawable.ic_launcher); 52  list.add(map); 53 map=new HashMap<String,Object>(); 54 map.put("name", "张三2"); 55 map.put("image", R.drawable.ic_launcher); 56  list.add(map); 57 map=new HashMap<String,Object>(); 58 map.put("name", "张三3"); 59 map.put("image", R.drawable.ic_launcher); 60  list.add(map); 61 SimpleAdapter adapter=new SimpleAdapter( 62 this, //上下文 63 list,//listview绑定的数据 64 R.layout.listview_item, //listview的子条目的布局的id 65 new String[]{"image","name"}, //data数据中的map集合里的key 66 new int[]{R.id.image,R.id.text}); //resource中的id 67 //String与int的数据必须一一对应 68  lv.setAdapter(adapter);//点击事件具体见Spinner下拉列表 69  } 70 71 }

Spinner-下拉列表

在vakues里建立一个arrays.xml文件,为listview提供数据,也可以写在string.xml文件里

 1 <?xml version="1.0" encoding="utf-8"?>  2 <resources>  3 <string-array name="list">  4 <item >第一条</item>  5 <item >第二条</item>  6 <item >第三条</item>  7 <item >第四条</item>  8 <item >第五条</item>  9 </string-array> 10 </resources>

activity_main.xml 布局

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  2 xmlns:tools="http://schemas.android.com/tools"  3 android:layout_width="match_parent"  4 android:layout_height="match_parent" >  5  6 <ListView  7 android:id="@+id/listView1"  8 android:divider="#ff0000"  9 android:dividerHeight="20px" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" 12 android:layout_alignParentLeft="true" 13 android:layout_alignParentTop="true" > 14 </ListView> 15 16 </RelativeLayout>

android:cacheColorHint=”#000000″    设置拖动背景颜色为透明
android:dividerHeigh=”30xp”             分割线高度
android:divider=”@drawable/ic_launcher”     分割线的背景
android:fadingEdge=”vertical”                 上边和下边有黑色的阴影,值为none就没有阴影
android:drawSelectorOnTop=”false”         点击某条记录不放,颜色会成为选中项的背景色
android:scrollbars=”vertical”                   只要值为horizontal或vertical时才会显示滚动条,并且会自动隐藏和显示
android:fastScrollEnabled=”true”                      快速滚动效果,在快速滚动的时候旁边会出现一个小方块的快速滚动
android:listSelector=””                         选中的item的颜色

android:entries            列表数据源

 android:fastScrollEnabled=”true”      可以拽着滚动条快速滑动

listView.setSelection(list.size()); // 将ListView定位到最后一行  传0也就是显示listview的第一行了

 listview.setSelector(R.drawable.choose_item_right); //在代码中为ListView设置选中项的背景图片

android:listSelector=”@drawable/choose_item_right”     在布局中设置选中项背景图的方法

 滑动到指定位置与记录当前的滑动位置

//记录listView的上一次位置,滑到到这个位置 visiblePosition = lv_one_citys.getFirstVisiblePosition(); if(lv_one_citys.getChildAt(0)!=null){ top = lv_one_citys.getChildAt(0).getTop();//当前页第一个item隐藏的高度 也就是获取偏移量  } lv_one_citys.setSelectionFromTop(visiblePosition, top);

listview_item.xml 布局

 1 <?xml version="1.0" encoding="utf-8"?>  2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  3 android:layout_width="match_parent"  4 android:layout_height="match_parent"  5 android:layout_gravity="center"  6 android:orientation="horizontal" >  7 <!-- 做为第二种方式的子条目布局 -->  8 <ImageView android:id="@+id/image"  9 android:layout_margin="10dp" 10 android:src="@drawable/ic_launcher" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content"/> 13 <TextView android:layout_width="wrap_content" 14 android:layout_height="wrap_content" 15 android:layout_margin="10dp" 16 android:textSize="25sp" 17 android:textColor="#FF0000" 18 android:id="@+id/text"/> 19 </LinearLayout>

————————————————————————————————————————————–

由于上面的这种方法创建对象过多,list的效率不高,所以下面这种为提高效率的方法

 1 package com.example.listview;  2  3 import java.util.ArrayList;  4 import java.util.HashMap;  5 import java.util.List;  6 import java.util.Map;  7  8 import com.example.listview.R.id;  9 10 import android.app.Activity; 11 import android.content.Context; 12 import android.os.Bundle; 13 import android.view.LayoutInflater; 14 import android.view.Menu; 15 import android.view.MenuItem; 16 import android.view.View; 17 import android.view.ViewGroup; 18 import android.widget.AdapterView; 19 import android.widget.AdapterView.OnItemClickListener; 20 import android.widget.ArrayAdapter; 21 import android.widget.BaseAdapter; 22 import android.widget.ImageView; 23 import android.widget.ListView; 24 import android.widget.SimpleAdapter; 25 import android.widget.TextView; 26 import android.widget.Toast; 27 28 public class MainActivity3 extends Activity { 29 30  @Override 31 protected void onCreate(Bundle savedInstanceState) { 32 super.onCreate(savedInstanceState); 33  setContentView(R.layout.activity_main); 34 ListView lv=(ListView) findViewById(id.listView1); 35 lv.setAdapter(new MyAdapter(this)); 36  } 37 static class MyAdapter extends BaseAdapter{ 38 int[] icons={android.R.drawable.ic_dialog_info, 39  android.R.drawable.ic_btn_speak_now,android.R.drawable.ic_dialog_map, 40  android.R.drawable.ic_input_delete,android.R.drawable.ic_lock_idle_low_battery, 41  android.R.drawable.ic_lock_idle_lock,android.R.drawable.ic_menu_recent_history, 42  android.R.drawable.ic_notification_clear_all,android.R.drawable.ic_menu_send}; 43 String[] title={"发送","删除","红包","提现","充值","装逼","加载","神坑","撤回"}; 44 private Context context; 45 46 public MyAdapter(Context context) { 47 super(); 48 this.context = context; 49  } 50 51  @Override 52 public int getCount() { 53 // TODO Auto-generated method stub 54 return title.length; 55  } 56 57  @Override 58 public Object getItem(int position) { 59 // TODO Auto-generated method stub 60 return title[position]; 61  } 62 63  @Override 64 public long getItemId(int position) { 65 // TODO Auto-generated method stub 66 return position; 67  } 68    69  @Override parent 表示的是设置该适配器的适配器控件(listview) 70 public View getView(int position, View convertView, ViewGroup parent) { 71  ViewHolder holder; 72 if(convertView==null){//上翻下翻挤出来的布局对象 73 holder=new ViewHolder(); 74 convertView=LayoutInflater.from(context).inflate(R.layout.listview_item, null); 75 holder.iv=(ImageView) convertView.findViewById(id.image);//获取布局中的子id 76 holder.tv=(TextView) convertView.findViewById(id.text); 77 convertView.setTag(holder);//标记 78 }else{ 79 holder=(ViewHolder) convertView.getTag();//获取标记 80 }//避免了每次ID的查找 81  holder.iv.setImageResource(icons[position]); 82  holder.tv.setText(title[position]); 83  System.out.println(convertView); 84 return convertView; 85 }//对象的重复利用,那么也就对对象的成员变量重复利用 86 static class ViewHolder{//提高在容器中查找ID的效率 87  ImageView iv; 88  TextView tv; 89  } 90  } 91 }

ListView实现多选模式

 

 1 package com.example.listview;  2  3 import java.util.ArrayList;  4 import java.util.HashMap;  5 import java.util.List;  6 import java.util.Map;  7  8 import com.example.listview.R.id;  9 10 import android.app.Activity; 11 import android.os.Bundle; 12 import android.view.Menu; 13 import android.view.MenuItem; 14 import android.view.View; 15 import android.widget.AdapterView; 16 import android.widget.AdapterView.OnItemClickListener; 17 import android.widget.ArrayAdapter; 18 import android.widget.ListView; 19 import android.widget.SimpleAdapter; 20 import android.widget.Toast; 21 22 public class MainActivity4 extends Activity { 23 24  @Override 25 protected void onCreate(Bundle savedInstanceState) { 26 super.onCreate(savedInstanceState); 27  setContentView(R.layout.activity_main); 28 ListView lv=(ListView) findViewById(id.listView1); 29 final String[] arr=getResources().getStringArray(R.array.arrays);//将xml资源转化成数组 30 ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice,arr); 31  lv.setAdapter(adapter); 32 lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//list多选模式 33 lv.setOnItemClickListener(new OnItemClickListener() { 34 35  @Override 36 public void onItemClick(AdapterView<?> parent, View view, 37 int position, long id) { 38  System.out.println(view); 39 Toast.makeText(MainActivity4.this, arr[position], 0).show(); 40  } 41  }); 42  } 43 44 }

 

上面代码中的 R.array.arrays

 1 <?xml version="1.0" encoding="utf-8"?>  2 <resources>  3  4 <string name="app_name">列表视图</string>  5 <string name="hello_world">Hello world!</string>  6 <string name="action_settings">Settings</string>  7 <string-array name="arrays">  8 <item >爱情</item>  9 <item >aa</item> 10 <item >bb</item> 11 <item >nn</item> 12 <item >mm</item> 13 </string-array> 14 </resources>

———————————————————————————————————————————————-

listview的一个重要方法

 

lv.addFooterView(v);//页脚视图,在Listview下显示的视图 可用来模拟加载数据

线程之间的通讯详情见线程文章,下面为在子线程发送消息要主线程的适配器修改数据:

 

class Loading implements Runnable{ public void run() { try { Thread.sleep(2000);//延迟加载 MainActivity5.this.initData();//增加数据 } catch (InterruptedException e) { e.printStackTrace(); }//告诉主线程数据加载完毕,需要主线程更新 handler.sendEmptyMessage(DATA_UPDATE);//发送标记  } } //线程之间的通讯机制 private static final int DATA_UPDATE=0x1;//标记 private android.os.Handler handler=new android.os.Handler(){ public void handleMessage(android.os.Message msg) { switch (msg.what) {//收到标记执行该方法 case DATA_UPDATE: myAdapter.notifyDataSetChanged();//通知数据改变 break; default: break; } } };

 

myAdapter为ListView的适配器,切记handler是在主线程运行的,而且不能在子线程里面对UI进行操作,详情见

Service-服务与线程(第一行代码)包含线程的总结

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154347.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Python websocket_php需要编译吗

    Python websocket_php需要编译吗这里很坑爹………地址换了….网上到处都是旧的github地址….更郁闷的是旧地址的代码在centos等各个linux都能编译通过,但是到了mac就郁闷了,各种报错…..坑爹来的然后很多人说hs没在维护了,那是因为他们看到的是旧的git代码地址….囧…..搞死我了,我还真以为他不更新了,看到git项目,3年没更新了,心都凉了……各种找错误各种…

  • 如何查看python源码_python判断路径是否存在

    如何查看python源码_python判断路径是否存在1.潜在误区2.本质原因及正确查看方法3.总结今天有个新来的实习生让我帮他看个问题,他想通过找到python源码位置来学习官方源码,但是却不幸报错。他想查看的是collections模块中Counter类所处的文件路径,直接使用代码却出现错误AttributeError:typeobject’Counter’hasnoattribute’__file__’。在我的谆谆教导下,不仅帮助他解决了问题,而且通过发现本质更加深入的理解了几个核心概念。

  • dex文件打开

    dex文件打开我们知道,要读取一个类代码,或读取类里的方法代码,都需要打开Dex文件,然后按前面介绍的格式去分析,并且读取出相应的内容,才可以给虚拟机进行解释执行。现在,我们就来学习和分析Dex文件的读取相关的代码。如下:/**Openthespecifiedfileread-only.Wememory-maptheentirethingand*parsethecontents

  • 电子元件-电阻

    本内容包括可调电位器的介绍,电阻率与温度系数,高精密电阻介绍,热敏电阻、压敏电阻、碳膜电阻与金属膜电阻介绍等。

  • 解决“只能通过Chrome网上应用商店安装该程序”的方法下载地址

    解决“只能通过Chrome网上应用商店安装该程序”的方法下载地址

    2021年10月12日
  • linux下移动文件命令_linux怎么移动文件

    linux下移动文件命令_linux怎么移动文件linux中移动文件在Linux中移动文件看似比较简单,但是可用的选项却比大多数人想象的要多。本文向初学者讲授如何在GUI和命令行中移动文件,同时还解释了幕后实际发生的情况,并介绍了许多经验丰富的用户很少探索的命令行选项。搬什么?在研究移动文件之前,值得仔细研究一下移动文件系统对象时实际发生的情况。创建文件后,会将其分配给一个inode,它是用于数据存储的文件系统中的固定点…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号