1 1.
public class ListFiles
extends Activity
2 {
3 ListView Listview=
null;
4 protected void onCreate(Bundle savedInstanceState)
5 {
6 super.onCreate(savedInstanceState);
7 super.setContentView(R.layout.files);
8 Listview=(ListView)
super.findViewById(R.id.list);
//获取listview控件
9 //Listview.setItemsCanFocus(false);
10
11 //设置listview的数据源这里的ListViewAdapter是一个继承自BaseAdapter的类对象,其内容在下面:
12 ListViewAdapter adapter=
new ListViewAdapter(
this, serachFile(),R.layout.listview_item_layout,
new String[]{"img","title","info","button"},
new int[]{R.id.imageView1,R.id.textView1,R.id.textView2,R.id.imagebutton1});
13
14
15 Listview.setAdapter(adapter);
16 //this.setContentView(Listview);
17 //为listview添加事件监听器
18 Listview.setOnItemClickListener(
new OnItemClickListener(){
19 public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2,
long arg3)
20 {
21 Toast.makeText(ListFiles.
this, "你点了第"+(arg2+1)+"项"
, Toast.LENGTH_LONG).show();
22 }
23
24 });
25 }
26 //从sdcard中扫描文件
27 public List<Map<String,Object>>
serachFile()
28 {
29 List<Map<String, Object>> list =
new ArrayList<Map<String, Object>>
();
30 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
31 {
32 File file=
new File(Environment.getExternalStorageDirectory().toString()+"/RecorderFile"
);
33 File[] files=
file.listFiles();
34
35 for(
int i=0;i<files.length;i++
)
36 {
37 if(files[i].getName().endsWith(".3gp"
))
38 {
39 Map<String,Object> map=
new HashMap<String,Object>
();
40 map.put("img"
, R.drawable.ic_launcher);
41 map.put("title"
, files[i].getName());
42 map.put("info"
, files[i].getPath());
43 map.put("button"
, R.drawable.control_play_blue);
44 list.add(map);
45 }
46 }
47 System.out.println("**************"+
Environment.getExternalStorageState());
48 }
49 return list;
50 }
51
52 }
53
54
55
56
57
58 2
.继承自BaseAdapter 的 ListViewAdapter类
59
60 public class ListViewAdapter
extends BaseAdapter
61 {
62 private Context myContext;
63 List<Map<String,Object>>
listMap;
64 LayoutInflater flater;
65 private int[] ID;
66 private String[] InforMation;
67 private int layoutID;
68 private MediaPlayer Media;
69 //次构造方法将调用此对象的数据传送过来,并通过声明对象来获取对象
70 public ListViewAdapter(ListFiles listFiles,List<Map<String, Object>> listMap2,
int listviewItemLayout,
71 String[] strings,
int[] is)
72 {
73 this.myContext=
listFiles;
74 listMap=listMap2;
//存储map的集合,也就是listview的所有数据
75 layoutID=listviewItemLayout;
//listviewItem的布局文件也就是自定义listview中的控件的布局文件
76 ID=
is;
77 InforMation=
strings;
78 flater=
LayoutInflater.from(myContext);
79
80 }
81 public int getCount()
82 {
83 return listMap.size();
84 }
85 public Object getItem(
int position)
86 {
87 return 0
;
88 }
89 public long getItemId(
int id) {
90 return id;
91 }
92
93 public View getView(
int position, View view, ViewGroup parent)
94 {
95 view=flater.inflate(layoutID,
null)
//通过LayoutInflater对象来获取到他的view控件内容
96
97
98 //这个循环是:listview中每一项中的数据控件,通过此方法来进行填充
99 for (
int i = 0; i < InforMation.length; i++
)
100 {
//备注1
101 if (view.findViewById(ID[i])
instanceof ImageView)
102 {
103 //这里的instaceof是如果当前找到的控件是ImageView控件的话,获取到他的控件,并设置其数据,而数据就存放到一个string类型的数组里这里是InforMation;其中的控件 的id已经存放到一个整形数组里面(ID);这里不能使ID[position]因为这是设置listview中每一项中的数据,所以要用到ID[i];listMap.get(position)是获取到当前listview中的Item 而不是Item中的数据
104 ImageView img =
(ImageView) view.findViewById(ID[i]);
105 img.setBackgroundResource((Integer)listMap.get(position).get(InforMation[i]));
106
107 }
108 else if (view.findViewById(ID[i])
instanceof TextView)
109 {
110 TextView title=
(TextView) view.findViewById(ID[i]);
111 title.setText(listMap.get(position).get(InforMation[i]).toString());
112 }
113 else if(view.findViewById(ID[i])
instanceof ImageButton)
114 {
115 ImageButton btn=
(ImageButton) view.findViewById(ID[i]);
116 btn.setImageURI(Uri.parse(listMap.get(position).get(InforMation[i]).toString()));
117 }
118
119
120 }
121 addListener(view,position);
122 return view;
//把数据中的每一项冲送个listview控件
123
124 }
125 private void addListener(View view,
final int position) {
126 view.findViewById(R.id.imagebutton1).setOnClickListener(
new OnClickListener(){
127 public void onClick(View v)
128 {
129 showDialog(position);
130 Toast.makeText(myContext, listMap.get(position).get("info"
).toString(), Toast.LENGTH_LONG).show();
131 }
132 });
133 }
134
135 //这个方法是播放当前选中的媒体文件
136 public void showDialog(
int position)
137 {
138
139 try
140 {
141 //其中MediaPlayer media=new MediaPlayer()不能这样写(有些情况),否则会报错
142 Media=MediaPlayer.create(myContext, Uri.parse(listMap.get(position).get("info"
).toString()));
143 if(Media!=
null)
144 {
145 Media.stop();
146 }
147 Media.prepare();
148 Media.start();
149
150 Builder dialog=
new AlertDialog.Builder(myContext);
151 dialog.setTitle("温情提示!"
);
152 dialog.setMessage("正在播放的是:"+listMap.get(position).get("info"
).toString());
153 dialog.setIcon(R.drawable.sound);
154 dialog.setCancelable(
true);
155 dialog.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
156 public void onClick(DialogInterface dialog,
int which)
157 {
158 Media.stop();
159 //Media.release();
160 dialog.dismiss();
161 }
162 });
163 dialog.show();
164 }
165 catch (Exception e)
166 {
167 e.printStackTrace();
168 }
169
170 }
171
172 }
173
174
175
176 注意:listview是通过自定义的布局文件中的话,如果其中包括button,checkBox等可选择的控件这样会让listview的item失去焦点;可以把button
177 的focusable属性设置为false这样button控件就自动放弃获得焦点,listview中的item就会获得焦点还有一种是:把自定义的的布局文件的根节点设置为: android:descendantFocusability="blocksDescendants"这样就可以阻止listview中的控件来获得焦点
179
转载于:https://www.cnblogs.com/tianshidechibang234/p/3198739.html
相关资源:JAVA上百实例源码以及开源项目