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>
分享到:
相关推荐
你可以通过重写`bindView()`方法来自定义每个条目的显示逻辑。此外,`SimpleCursorAdapter`还有`setViewBinder()`方法,可以设置一个`ViewBinder`来控制特定列的数据如何显示到View上。 例如,如果你想要对某一列的...
在自定义Adapter中,重写`getView()`方法来返回每个列表项的View对象。 总结,ArrayAdapter适用于简单的数据绑定,SimpleCursorAdapter适用于SQLite数据库,而SimpleAdapter则适用于非数据库的Map数据结构。理解并...
实现BaseAdapter需要重写`getCount()`、`getItem()`、`getItemId()`和`getView()`方法。`getView()`是最关键的部分,用于创建和填充每个列表项的视图。 3. **SimpleAdapter** SimpleAdapter简化了数据绑定的过程,...
创建一个`ContentProvider` 需要继承 `ContentProvider` 类,并重写其中的关键方法,如 `query()`, `insert()`, `update()`, `delete()` 和 `getType()`。通过`UriMatcher` 可以匹配不同的URI请求,实现对数据的增删...
SimpleCursorAdapter:用于显示简单文本类型的listView,一般在数据库那里会用到,不过有点过时, 不推荐使用! BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter!
你需要继承`SQLiteOpenHelper`并重写`onCreate()`和`onUpgrade()`方法。`onCreate()`会在数据库首次创建时调用,`onUpgrade()`则用于在数据库升级时执行必要的操作。 接下来,我们创建表。在`SQLiteOpenHelper`的...
继承CursorAdapter后,你可以重写`bindView(View view, Context context, Cursor cursor)`方法来自定义每行数据的显示。CursorAdapter还提供了`newView(Context context, Cursor cursor, ViewGroup parent)`方法,...
自定义适配器需要重写`getView()`方法,以便在每次需要渲染新的列表项时,根据数据创建或复用视图。 例如,在使用SimpleCursorAdapter时,可以通过指定列名和视图ID,将Cursor中的特定列映射到XML布局文件中定义的...
2. **SimpleCursorAdapter基本用法**:SimpleCursorAdapter是一个简化了的数据绑定类,用于将Cursor中的数据绑定到ListView等组件上,使数据展示更加直观便捷。 3. **上下文菜单基本用法**:上下文菜单是在用户界面...
- 自定义适配器需要继承BaseAdapter或CursorAdapter,重写其中的方法,如`getView()`,以实现自定义的视图创建和数据绑定。 6. **优化ListView**: - 为了提高性能,ListView支持视图复用,即convertView参数。在...
如果需要更复杂的UI效果,可以通过重写父类方法来自定义行为。 总结来说,Android中的Adapter机制为开发者提供了强大的数据展示能力。BaseAdapter提供最大的灵活性,适合需要定制复杂视图的场景;ArrayAdapter简洁...
在Android中,我们通常通过继承`SQLiteOpenHelper`类来实现,重写`onCreate()`和`onUpgrade()`方法。`onCreate()`用于创建数据库和表,`onUpgrade()`则用于更新数据库版本和结构。数据库操作通常包括插入(insert)...
- 自定义适配器需要重写`getView()`方法,该方法负责为ListView的每个item创建和初始化视图。 6. **性能优化**: - 使用ViewHolder设计模式可以提高ListView的性能,减少视图查找的开销。 - 使用convertView参数...
在子类中,你需要重写以下方法: - onCreate(SQLiteDatabase db):当数据库首次创建时调用,用于创建表的SQL语句应在此处编写。 - onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):当数据库版本号...
4. **SimpleCursorAdapter**:在处理数据库数据时,SimpleCursorAdapter通常会被使用。它将SQLite数据库中的Cursor对象转换为ListView的条目。然而,由于其功能相对有限且已有更好的替代方案,现在不推荐直接使用...
自定义Adapter通常需要重写`getView()`方法,以便在其中填充每个列表项的视图内容。 总结起来,Adapter在Android开发中扮演着不可或缺的角色,它们是连接数据和UI的桥梁,使得开发者可以轻松地将各种类型的数据转换...
自定义Adapter需要重写`getView()`方法来显示每个项目的视图。 ```java ArrayList<MyObject> dataList = new ArrayList(); // 添加数据到dataList MyObjectAdapter adapter = new MyObjectAdapter(this, R.layout....
通过继承该类并重写其中的方法,开发者可以轻松地实现数据库的创建、升级以及版本管理。主要方法包括: - `onCreate(SQLiteDatabase db)`: 在首次创建数据库时调用,通常用于初始化数据库结构,即创建表。 - `...
在实际开发中,我们通常会创建一个继承自`SQLiteOpenHelper`的类,重写`onCreate()`和`onUpgrade()`方法来管理数据库的生命周期。然后使用`SQLiteDatabase`类提供的方法进行数据操作,并通过`Cursor`查询数据。对于...