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. 关于scanf的几种处理方法

    字符输入中,赋值顺序和缓存的联系 scanf是从标准输入缓冲区中读取输入的数据,假设连续输入两个%c格式的字符.而中间又要涉及回车,那么第二个字符将被赋予回车. 解决的方法: .清空输入缓冲区 第一个 ...

  2. Configuring the JA-SIG CAS Client --官方

    1. for Java using Spring Configuration of the CAS Client for Java via Spring IoC will depend heavily ...

  3. [转] vim 正则表达式 很强大

    毋庸多言,在vim中正则表达式得到了十分广泛的应用. 最常用的 / 和 :s 命令中,正则表达式都是不可或缺的. 下面对vim中的正则表达式的一些难点进行说明. 关于magic vim中有个magic ...

  4. yii console.php 报错 Property "CConsoleApplication.theme" is not defined.

    默认配置的话,是不会出现这个错误的,应该是有人为修改了 yiic.php 这个文件,本来是 $config 载入的应该是 console.php ,人为修改后载入了 main.php 这个配置文件了 ...

  5. TreeView绑定无限层级关系类

    protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Bind_TV(TreeView1.Nodes); ...

  6. [Linux]三种方案在Windows系统下安装ubuntu双系统(转)

    在学习linux的过程中,ubuntu无疑是初学者的最佳选择. 下面来列举给Windows系统安装ubuntu双系统的三种方法. 一.虚拟机安装(不推荐) 使用工具:Vmware 如果不是因为迫不得已 ...

  7. Android弹性ScrollView

    开袋即食 import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; ...

  8. ajax上传文件进度条

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. js子窗口修改父窗口内容

    在框架中,我用 JavaScript 获取 JSON 数据,组织成 HTML 代码,最后将其填充至上层文档的一个元素中.按照一般的写法,我们需要用到类似如下的语句: 1.window.parent.d ...

  10. CSS 解决<td>里面内容太多把表格弄变形的原因,设置 自动换行。

    1 < style="word-break:break-all"> 例如div宽200px,它的内容就会到200px自动换行,如果该行末端有个英文单词很长(congra ...