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. Guice学习(一)

    Guice学习(一) Guice是Google开发的一个轻量级依赖注入框架(IOC).Guice非常小而且快,功能类似与Spring,但效率上网上文档显示是它的100倍,而且还提供对Servlet,A ...

  2. Asp.Net mvc筛选器中返回信息中断操作

    在mvc中,使用response.end()或Response.Redirect("url"); 是无法阻止请求继续往下执行的.如果在action中,可以我们可以使用return ...

  3. javascript加载图片获取图片尺寸信息方法

    如果你遇到不方便从服务器取图片尺寸信息的话,用下面代码就很方便了. // 更新: // 05.27: 1.保证回调执行顺序:error > ready > load:2.回调函数this指 ...

  4. iTerm2和oh-my-zsh的个性化定制

    终于在某东做活动新入手了一台air,看身边小伙伴的mac的终端感觉好炫酷,于是乎准备自己也捯饬捯饬,google了一下,发现了osx平台上的终端神器iTerm2和用来代替bash的oh-my-zsh, ...

  5. js三种消息框总结-警告框、确认框、提示框

    js消息框类别:警告框.确认框.提示框 警告框:alert("文本"); 确认框:confirm("文本"); 提示框:prompt("文本" ...

  6. js中如何把字符串转化为对象

    例如   [javascript]  var test='{ colkey: "col", colsinfo: "NameList" }'       var ...

  7. mssql定时执行作业。

    ---2000 企业管理器 --管理 --SQL Server代理 --右键作业 --新建作业 --"常规"项中输入作业名称 --"步骤"项 --新建 --&q ...

  8. linux定时执行任务 转

    转自:http://www.cnblogs.com/thinksasa/archive/2013/06/06/3121030.html linux定时执行任务   (1)Linux下如何定时执行php ...

  9. Menu之选项菜单

    Android有三种形式的菜单:选项菜单(optionMenu).上下文菜单(ContextMenu).子菜单(subMenu).最常用的是选项菜单,该菜单在点击menu按键后会在对应的Activit ...

  10. thinkphp3.23整合phpexcel

    HINKPHP3.2.3整合PHPexcel实现数据的导入导出.可以上传excel文件后批量导入到数据库,兼容.xls和.xlsx格式:数据库里的数据可以按照搜索条件和分页导出为excel文件.最近接 ...