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

ListView-1(包括常用属性和方法)「建议收藏」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

 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 adapter=ArrayAdapter.createFromResource(this, R.array.list, android.R.layout.simple_list_item_checked);
33 //方法二:指定数组
34 ArrayAdapter adapter=new ArrayAdapter(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> list=new ArrayList>();
49 Map map=new HashMap();
50 map.put("name", "张三1");
51 map.put("image", R.drawable.ic_launcher);
52 list.add(map);
53 map=new HashMap();
54 map.put("name", "张三2");
55 map.put("image", R.drawable.ic_launcher);
56 list.add(map);
57 map=new HashMap();
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 
2
3
4 第一条
5 第二条
6 第三条
7 第四条
8 第五条
9

10

activity_main.xml 布局

 1 
 2     xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent" >
5
6 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
15
16

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 
2 3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:layout_gravity="center"
6 android:orientation="horizontal" >
7
8 9 android:layout_margin="10dp"
10 android:src="@drawable/ic_launcher"
11 android:layout_width="wrap_content"
12 android:layout_height="wrap_content"/>
13 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

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

由于上面的这种方法创建对象过多,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 adapter=new ArrayAdapter(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 
2
3
4 列表视图
5 Hello world!
6 Settings
7
8 爱情
9 aa
10 bb
11 nn
12 mm
13

14

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

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-服务与线程(第一行代码)包含线程的总结

编程小号
上一篇 2025-03-21 07:40
下一篇 2025-02-27 12:06

相关推荐

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