我是编程的新手,试图弄清楚如何在recyclerview中流式传输.mp3文件
如何将我的基本适配器转换为Recycler View适配器?有没有简单的方法?
我需要这样做,因为最终在回收站的每个 View 中我都需要一个搜索栏
我在主要 Activity 中的基本适配器:
class MainActivity : AppCompatActivity() {
var listSongs = ArrayList<SongFile>()
var adapter : MySongAdapter? = null
var mp : MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
listSongs.add(SongFile("title1","https://firebasestorage...."))
listSongs.add(SongFile("title2","https://firebasestorage...."))
listSongs.add(SongFile("title3","https://firebasestorage...."))
listSongs.add(SongFile("title4","https://firebasestorage....."))
adapter = MySongAdapter(listSongs)
listview.adapter = adapter
}
inner class MySongAdapter : BaseAdapter {
var myListSong = ArrayList<SongFile>()
constructor(myListSong: ArrayList<SongFile>) : super() {
this.myListSong = myListSong
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var myview = layoutInflater.inflate(R.layout.mylayout,null)
var Song = this.myListSong[position]
myview.textView.text = Song.Title
myview.button.setOnClickListener {
if(myview.button.text == "STOP") {
mp!!.stop()
myview.button.text = "PLAY"
}
else{
mp = MediaPlayer()
try {
mp!!.setDataSource(Song.SongURL)
mp!!.prepare()
mp!!.start()
myview.button.text = "STOP"
}catch (e:Exception){}
}
}
return myview
}
override fun getItem(p0: Int): Any {
return myListSong[p0]
}
override fun getItemId(p0: Int): Long {
return p0.toLong()
}
override fun getCount(): Int {
return myListSong.size
}
}
}
我的空Recycler View适配器:class Adapter(context: Context, private val List: ArrayList<Model>) : RecyclerView.Adapter<Adapter.ViewHodler>() {
private val mContext: Context
init {
mContext = context
}
override fun onCreateViewHolder(parent: ViewGroup, p1: Int): Adapter.ViewHodler {
val row = LayoutInflater.from(mContext).inflate(R.layout.list_item,parent,false)
return ViewHodler(row)
}
override fun getItemCount(): Int {
return List.size
}
inner class ViewHodler(v : View) : RecyclerView.ViewHolder(v) {
val viewTitle = v.title
}
override fun onBindViewHolder(holder: ViewHodler, position: Int) {
val model = List[position]
holder.viewTitle!!.text = model.Title
}
}
最佳答案
`
inner class ViewHodler(v : View) : RecyclerView.ViewHolder(v) {
val viewTitle = v.findViewById(R.id.title) as TextView
val button = v.findViewById(R.id.button) as Button
}
override fun onBindViewHolder(holder: ViewHodler, position: Int) {
val model = List[position]
holder.viewTitle?.text = model.Title
holder.button.setOnClickListener {
if(holder.button.text == "STOP") {
mp?.stop()
myview.button.text = "PLAY"
}else{
mp = MediaPlayer()
try {
mp?.setDataSource(Song.SongURL)
mp?.prepare()
mp?.start()
myview.button.text = "STOP"
}catch (e:Exception){}
}
}
}`
您还可以避免onBindViewHolder()
中的代码,并创建一个类似于ViewHolder
的方法onBind(file : SongFile)
并将对象传递给此方法。
关于android - 如何将基本适配器更改为Recycler View适配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64400378/