1. public class ListFiles extends Activity
{
ListView Listview=null;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
super.setContentView(R.layout.files);
Listview=(ListView) super.findViewById(R.id.list);//获取listview控件
//Listview.setItemsCanFocus(false); //设置listview的数据源这里的ListViewAdapter是一个继承自BaseAdapter的类对象,其内容在下面:
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}); Listview.setAdapter(adapter);
//this.setContentView(Listview);
//为listview添加事件监听器
Listview.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)
{
Toast.makeText(ListFiles.this, "你点了第"+(arg2+1)+"项", Toast.LENGTH_LONG).show();
} });
}
//从sdcard中扫描文件
public List<Map<String,Object>> serachFile()
{
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
File file=new File(Environment.getExternalStorageDirectory().toString()+"/RecorderFile");
File[] files=file.listFiles(); for(int i=0;i<files.length;i++)
{
if(files[i].getName().endsWith(".3gp"))
{
Map<String,Object> map=new HashMap<String,Object>();
map.put("img", R.drawable.ic_launcher);
map.put("title", files[i].getName());
map.put("info", files[i].getPath());
map.put("button", R.drawable.control_play_blue);
list.add(map);
}
}
System.out.println("**************"+Environment.getExternalStorageState());
}
return list;
} } 2.继承自BaseAdapter 的 ListViewAdapter类 public class ListViewAdapter extends BaseAdapter
{
private Context myContext;
List<Map<String,Object>> listMap;
LayoutInflater flater;
private int[] ID;
private String[] InforMation;
private int layoutID;
private MediaPlayer Media;
//次构造方法将调用此对象的数据传送过来,并通过声明对象来获取对象
public ListViewAdapter(ListFiles listFiles,List<Map<String, Object>> listMap2, int listviewItemLayout,
String[] strings, int[] is)
{
this.myContext=listFiles;
listMap=listMap2;//存储map的集合,也就是listview的所有数据
layoutID=listviewItemLayout;//listviewItem的布局文件也就是自定义listview中的控件的布局文件
ID=is;
InforMation=strings;
flater=LayoutInflater.from(myContext); }
public int getCount()
{
return listMap.size();
}
public Object getItem(int position)
{
return 0;
}
public long getItemId(int id) {
return id;
} public View getView( int position, View view, ViewGroup parent)
{
view=flater.inflate(layoutID, null)//通过LayoutInflater对象来获取到他的view控件内容 //这个循环是:listview中每一项中的数据控件,通过此方法来进行填充
for (int i = 0; i < InforMation.length; i++)
{//备注1
if (view.findViewById(ID[i]) instanceof ImageView)
{
//这里的instaceof是如果当前找到的控件是ImageView控件的话,获取到他的控件,并设置其数据,而数据就存放到一个string类型的数组里这里是InforMation;其中的控件    的id已经存放到一个整形数组里面(ID);这里不能使ID[position]因为这是设置listview中每一项中的数据,所以要用到ID[i];listMap.get(position)是获取到当前listview中的Item    而不是Item中的数据
ImageView img = (ImageView) view.findViewById(ID[i]);
img.setBackgroundResource((Integer)listMap.get(position).get(InforMation[i])); }
else if (view.findViewById(ID[i]) instanceof TextView)
{
TextView title=(TextView) view.findViewById(ID[i]);
title.setText(listMap.get(position).get(InforMation[i]).toString());
}
else if(view.findViewById(ID[i]) instanceof ImageButton)
{
ImageButton btn=(ImageButton) view.findViewById(ID[i]);
btn.setImageURI(Uri.parse(listMap.get(position).get(InforMation[i]).toString()));
} }
addListener(view,position);
return view;//把数据中的每一项冲送个listview控件 }
private void addListener(View view, final int position) {
view.findViewById(R.id.imagebutton1).setOnClickListener(new OnClickListener(){
public void onClick(View v)
{
showDialog(position);
Toast.makeText(myContext, listMap.get(position).get("info").toString(), Toast.LENGTH_LONG).show();
}
});
} //这个方法是播放当前选中的媒体文件
public void showDialog(int position)
{ try
{
//其中MediaPlayer media=new MediaPlayer()不能这样写(有些情况),否则会报错
Media=MediaPlayer.create(myContext, Uri.parse(listMap.get(position).get("info").toString()));
if(Media!=null)
{
Media.stop();
}
Media.prepare();
Media.start(); Builder dialog=new AlertDialog.Builder(myContext);
dialog.setTitle("温情提示!");
dialog.setMessage("正在播放的是:"+listMap.get(position).get("info").toString());
dialog.setIcon(R.drawable.sound);
dialog.setCancelable(true);
dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which)
{
Media.stop();
//Media.release();
dialog.dismiss();
}
});
dialog.show();
}
catch (Exception e)
{
e.printStackTrace();
} } } 注意:listview是通过自定义的布局文件中的话,如果其中包括button,checkBox等可选择的控件这样会让listview的item失去焦点;可以把button
177     的focusable属性设置为false这样button控件就自动放弃获得焦点,listview中的item就会获得焦点还有一种是:把自定义的的布局文件的根节点设置为:
      android:descendantFocusability="blocksDescendants"这样就可以阻止listview中的控件来获得焦点

Android中ListView通过BaseAdapter实现数据的绑定的更多相关文章

  1. Android中ListView动态加载数据

    1. 引言: 为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的 ...

  2. Android中ListView分页加载数据

    public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...

  3. Android中ListView异步加载数据

    1.主Activity public class MainActivity extends Activity { private ListView listView; private ArrayLis ...

  4. android 中listview之BaseAdapter的使用

    Listview控件不像其他安卓控件那种直接拖拽到界面上就能用,而是采用类似J2EE中的MVC模型的方式使用,需要通过适配器将某种样式的数据或控件添加到其上而使用. MVC模型实现原理是 数据模型M( ...

  5. android中ListView控件&&onItemClick事件中获取listView传递的数据

    http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...

  6. Android中ListView控件的使用

    Android中ListView控件的使用 ListView展示数据的原理 在Android中,其实ListView就相当于web中的jsp,Adapter是适配器,它就相当于web中的Servlet ...

  7. Android中Adapter之BaseAdapter使用

    Android界面中有时候需要显示稍微复杂的界面时,就需要我们自定义一个adapter,而此adapter就要继承BaseAdapter,重新其中的方法.         Android中Adapte ...

  8. android中ListView点击和里边按钮点击不能同时生效问题解决

    今天遇到一个问题:android中ListView点击和里边button点击不能同时生效问题解决. 原因是: listView 在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得 ...

  9. Android中Listview点击item不变颜色以及设置listselector 无效

    Android中Listview点击item不变颜色以及设置listselector 无效 这是同一个问题,Listview中点击item是会变颜色的,因为listview设置了默认的listsele ...

随机推荐

  1. spring mvc事务注解

    @Transactional(noRollbackFor=RuntimeException.class)方法事务说明@Transactional(RollbackFor=Exception.class ...

  2. Android开发/源代码资源汇总

    全网最全的Android游戏源代码汇总 mod=viewthread&tid=5080&fromuid=5" target="_blank">htt ...

  3. 多线程、Service与IntentService的比较

    资料摘自网络(侵删)     Service Thread IntentService AsyncTask When to use ? Task with no UI, but shouldn't b ...

  4. 【网络流#2】hdu 1533 - 最小费用最大流模板题

    最小费用最大流,即MCMF(Minimum Cost Maximum Flow)问题 嗯~第一次写费用流题... 这道就是费用流的模板题,找不到更裸的题了 建图:每个m(Man)作为源点,每个H(Ho ...

  5. Linux 系统运行级别

    Linux运行级别从0-6,共7个.  0:关机.不能将系统缺省运行级别设置为0,否则无法启动.  1:单用户模式,只允许root用户对系统进行维护.  2:多用户模式,但不能使用NFS(相当于Win ...

  6. python 整型--《Python 3程序开发指南》笔记

    参考:<Python 3程序开发指南> 整数转换函数: bin(i) 返回整数i的二进制表示(字符串) hex(i) 返回i的十六进制表示(字符串) int(x) 将x转换为整数,失败产生 ...

  7. IIS配置

    IIS配置文档: 1.安装IIS.控制面板→程序→打开关闭Windows功能,Web管理服务和万维网服务都勾上. 2.部署网站:ASP.Net项目的发布:项目中点右键“发布”,选择“文件系统”,发布到 ...

  8. 菜鸟学习Ado.net笔记一:Ado.net学习之SqlHelper类

    using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; usin ...

  9. Android 软件盘 动态设置 layout

    总体来说分为三种方法: 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: ...

  10. zepto源码研究 - fx_methods.js

    简要:依赖fx.js,主要是针对show,hide,fadeIn,fadeOut的封装. 源码如下: // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zept ...