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