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. sqlcipher移植

    一.下载代码 sqlcipher赖openssl库,首先下载openssl: [fulinux@ubuntu ~]$ git clone https://github.com/openssl/open ...

  2. Shell脚本:判断用户和用户组是否已经存在/创建用户和用户组

      通常作为一个应用程序的部署脚本,开始的第一项工作是为当前应用创建一个专用(dedicated)的用户和用户组.这个脚本很简单,这里贴一个参考样本: #!/bin/sh user=test_user ...

  3. VS中批量删除cs代码中的#region和#endregion

    Visual Studio中如何批量删除cs代码中的#region和#endregion,不删除它们中间的代码,只删除这两个标记及标记的注解的方法.Vs中提供了很强大的文本查找与替换功能,简单的替换只 ...

  4. Java基础知识强化27:Object类之toString()方法

    1. Object类的toString()方法: public  String  toString():返回该对象的字符串表示 2. 案例演示: (1)Student类: package cn.itc ...

  5. JavaScript 浮点数运算 精度问题

    JavaScript小数在做四则运算时,精度会丢失,这会在项目中引起诸多不便,先请看下面脚本. //加减 <script type="text/javascript" lan ...

  6. 汉字转拼音(pinyin4j-2.5.0.jar)

    import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCase ...

  7. IE8兼容placeholder的方案

    用JavaScript解决Placeholder的IE8兼容问题 placeholder属性是HTML5新添加的属性,当input或者textarea设置了该属性后,该值的内容将作为灰色提示显示在文本 ...

  8. parent.location.href和location.href区别

    parent.location.href='ind.php'parent用于框架结构,需要全网页转向如果你的网页是左右框架,那么,直接把当前页面全部转到ind.php中 location.href=' ...

  9. starting Intent from ProcessRecord with revoked permission android.permission.CALL_PHONE 的错误

    昨天写个电话拨号器,很简单就一个Edittext和一个button,用来输入号码并且点击按钮拨打电话,但是写好以后报的是安全错误,我上网查了下,原来是缺少授权,于是我在AndroidManifest. ...

  10. JavaScript 之 使用 XMLHttpRequest 预览文件(图片)

    <div id="div1"> <input type="file" id="uploadfile" style=&quo ...