`
bashenmail
  • 浏览: 228801 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

重写SimpleCursorAdapter

阅读更多
import android.content.Context;
import android.database.Cursor;
import android.provider.MediaStore;
import android.view.View;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class MusicListAdapter extends SimpleCursorAdapter {

	private static boolean[] isFocused ;
	
	private static int whichClick = -1;
	
	public MusicListAdapter(Context context, int layout, Cursor c,
			String[] from, int[] to) {
		super(context, layout, c, from, to);
		
		isFocused = new boolean[c.getCount()];
		
		for(int i=0;i<c.getCount();i++){
			
			isFocused[i] = false;
		}
		
	}

	public void changeBg(int position){
		
		isFocused[whichClick==-1?0:whichClick] = false;
		
		whichClick = position;
		
		isFocused[position] = true;
		
		notifyDataSetChanged();
	}
	
	@Override
	public void bindView(View view, Context context, Cursor cursor) {

		TextView m_name = (TextView) view.findViewById(R.id.m_name);
		
		TextView m_artist = (TextView) view.findViewById(R.id.m_artist);
		
		TextView m_time = (TextView) view.findViewById(R.id.m_time);
		
		TextView m_size = (TextView)view.findViewById(R.id.m_size);
		
		String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
		
        m_name.setText(title.length()>14?title.substring(0, 14)+"...":title);
        
		m_artist.setText(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)));
		
		int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
		
		int min = (duration / 1000) / 60;
		
		int sec = (duration / 1000) % 60;
		
		m_time.setText(min+":"+sec);
		
		int size = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));
		
		size =(int)(((float)size/1024)/1024*100);
		
		float fs = (float)size/100;
		
		m_size.setText(fs+"M");
		
		view.setBackgroundResource(isFocused[cursor.getPosition()]?android.R.drawable.alert_light_frame:android.R.drawable.alert_dark_frame);
		
		super.bindView(view, context, cursor);
	}

 调用代码

  

mCursor =getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,
				null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);

 

musicadapter = new MusicListAdapter(PlayMusic.this,
					R.layout.playmusic, mCursor, new String[] {}, new int[] {});

 R.layout.playmusic:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <!-- 歌曲名 -->
<TextView 
  android:id="@+id/m_name"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:textSize="20px"
  android:layout_alignParentLeft="true"
  /> 
  <!-- 歌手 -->
<TextView 
  android:id="@+id/m_artist"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:textSize="15px"
  android:layout_below="@id/m_name"
  /> 
  <!-- 播放时间 -->
<TextView 
  android:id="@+id/m_time"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:textSize="15px"
  android:paddingTop="5px"
  android:layout_alignRight="@id/m_name"
  android:layout_alignParentRight="true"
  />    
<!-- 大小 -->  
<TextView 
  android:id="@+id/m_size"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:textSize="15px"
  android:layout_below="@id/m_time"
  android:layout_alignParentRight="true"
  />    
</RelativeLayout>

 

分享到:
评论

相关推荐

    SimpleCursorAdapter简单实例

    你可以通过重写`bindView()`方法来自定义每个条目的显示逻辑。此外,`SimpleCursorAdapter`还有`setViewBinder()`方法,可以设置一个`ViewBinder`来控制特定列的数据如何显示到View上。 例如,如果你想要对某一列的...

    android ListView及ArrayAdapter,SimpleCursorAdapter,SimpleAdapter用法示例

    在自定义Adapter中,重写`getView()`方法来返回每个列表项的View对象。 总结,ArrayAdapter适用于简单的数据绑定,SimpleCursorAdapter适用于SQLite数据库,而SimpleAdapter则适用于非数据库的Map数据结构。理解并...

    ListView 与ArrayAdapter,BaseAdapter,SimpleAdapter,SimpleCursorAdapter配合使用实例。

    实现BaseAdapter需要重写`getCount()`、`getItem()`、`getItemId()`和`getView()`方法。`getView()`是最关键的部分,用于创建和填充每个列表项的视图。 3. **SimpleAdapter** SimpleAdapter简化了数据绑定的过程,...

    AsyncQueryHandler及ContentProvider代码实例

    创建一个`ContentProvider` 需要继承 `ContentProvider` 类,并重写其中的关键方法,如 `query()`, `insert()`, `update()`, `delete()` 和 `getType()`。通过`UriMatcher` 可以匹配不同的URI请求,实现对数据的增删...

    基于Eclipse的 Android Adapter在ListView和GridView中的应用

    SimpleCursorAdapter:用于显示简单文本类型的listView,一般在数据库那里会用到,不过有点过时, 不推荐使用! BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter!

    sqlite的完整实例

    你需要继承`SQLiteOpenHelper`并重写`onCreate()`和`onUpgrade()`方法。`onCreate()`会在数据库首次创建时调用,`onUpgrade()`则用于在数据库升级时执行必要的操作。 接下来,我们创建表。在`SQLiteOpenHelper`的...

    SQLite适配器使用

    继承CursorAdapter后,你可以重写`bindView(View view, Context context, Cursor cursor)`方法来自定义每行数据的显示。CursorAdapter还提供了`newView(Context context, Cursor cursor, ViewGroup parent)`方法,...

    AndroidListViewadapter深入解析.pdf

    自定义适配器需要重写`getView()`方法,以便在每次需要渲染新的列表项时,根据数据创建或复用视图。 例如,在使用SimpleCursorAdapter时,可以通过指定列名和视图ID,将Cursor中的特定列映射到XML布局文件中定义的...

    Android数据存储与访问

    2. **SimpleCursorAdapter基本用法**:SimpleCursorAdapter是一个简化了的数据绑定类,用于将Cursor中的数据绑定到ListView等组件上,使数据展示更加直观便捷。 3. **上下文菜单基本用法**:上下文菜单是在用户界面...

    Android中ListView的应用介绍

    - 自定义适配器需要继承BaseAdapter或CursorAdapter,重写其中的方法,如`getView()`,以实现自定义的视图创建和数据绑定。 6. **优化ListView**: - 为了提高性能,ListView支持视图复用,即convertView参数。在...

    adapter.doc

    如果需要更复杂的UI效果,可以通过重写父类方法来自定义行为。 总结来说,Android中的Adapter机制为开发者提供了强大的数据展示能力。BaseAdapter提供最大的灵活性,适合需要定制复杂视图的场景;ArrayAdapter简洁...

    android ListView与SQLiteDatabase结合

    在Android中,我们通常通过继承`SQLiteOpenHelper`类来实现,重写`onCreate()`和`onUpgrade()`方法。`onCreate()`用于创建数据库和表,`onUpgrade()`则用于更新数据库版本和结构。数据库操作通常包括插入(insert)...

    androidListView详解.pdf

    - 自定义适配器需要重写`getView()`方法,该方法负责为ListView的每个item创建和初始化视图。 6. **性能优化**: - 使用ViewHolder设计模式可以提高ListView的性能,减少视图查找的开销。 - 使用convertView参数...

    android连接数据库[参考].pdf

    在子类中,你需要重写以下方法: - onCreate(SQLiteDatabase db):当数据库首次创建时调用,用于创建表的SQL语句应在此处编写。 - onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):当数据库版本号...

    Android应用开发-Adapter的使用.pptx

    4. **SimpleCursorAdapter**:在处理数据库数据时,SimpleCursorAdapter通常会被使用。它将SQLite数据库中的Cursor对象转换为ListView的条目。然而,由于其功能相对有限且已有更好的替代方案,现在不推荐直接使用...

    android adapter 开发总结

    自定义Adapter通常需要重写`getView()`方法,以便在其中填充每个列表项的视图内容。 总结起来,Adapter在Android开发中扮演着不可或缺的角色,它们是连接数据和UI的桥梁,使得开发者可以轻松地将各种类型的数据转换...

    android listview和spinner实例代码

    自定义Adapter需要重写`getView()`方法来显示每个项目的视图。 ```java ArrayList&lt;MyObject&gt; dataList = new ArrayList(); // 添加数据到dataList MyObjectAdapter adapter = new MyObjectAdapter(this, R.layout....

    android的连接数据库SQLite3.doc

    通过继承该类并重写其中的方法,开发者可以轻松地实现数据库的创建、升级以及版本管理。主要方法包括: - `onCreate(SQLiteDatabase db)`: 在首次创建数据库时调用,通常用于初始化数据库结构,即创建表。 - `...

    android连接数据库.pdf

    在实际开发中,我们通常会创建一个继承自`SQLiteOpenHelper`的类,重写`onCreate()`和`onUpgrade()`方法来管理数据库的生命周期。然后使用`SQLiteDatabase`类提供的方法进行数据操作,并通过`Cursor`查询数据。对于...

Global site tag (gtag.js) - Google Analytics