我是android开发新手,我决定编写一个音乐播放器,但它在recycler_view.LayoutManager = LayoutManager和recycler_view.adapter = SongListAdapter行中给出了错误。我不明白问题出在哪里,知道的人可以告诉我吗?这是 MainActivity 的代码:
package com.example.zevamusic
import android.annotation.SuppressLint
import android.database.Cursor
import android.os.Bundle
import android.provider.MediaStore
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.LinearLayoutManager
import com.example.zevamusic.adapters.SongListAdapter
import com.example.zevamusic.model.SongModel
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var songModelData:ArrayList<SongModel> = ArrayList()
var songListAdapter:SongListAdapter?=null
@SuppressLint("Range")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var songCursor: Cursor? = contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null,null,null,null)
while (songCursor!=null && songCursor.moveToNext()){
var songName = songCursor.getString(songCursor.getColumnIndex(MediaStore.Audio.Media.TITLE))
var songDuration = songCursor.getString(songCursor.getColumnIndex(MediaStore.Audio.Media.DURATION))
songModelData.add(SongModel(songName,songDuration))
}
songListAdapter = SongListAdapter(songModelData)
var layoutManager = LinearLayoutManager(applicationContext)
recycler_view.LayoutManager = layoutManager
recycler_view.adapter = songListAdapter
}
}
这是来自 SongListAdapter 的代码:
package com.example.zevamusic.adapters
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import com.example.zevamusic.R
import com.example.zevamusic.model.SongModel
class SongListAdapter(SongModel:ArrayList<SongModel>):RecyclerView.Adapter<SongListAdapter.SongListViewHolder>() {
var mSongModel = SongModel
override fun getItemCount(): Int {
return mSongModel.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SongListViewHolder {
var view = LayoutInflater.from(parent!!.context).inflate(R.layout.music_row,parent,false)
return SongListViewHolder(view)
}
override fun onBindViewHolder(holder: SongListViewHolder, position: Int) {
var model = mSongModel[position]
var songName = model.mSongName
var songDuration = model.mSongDuration
holder!!.songTV.text = songName
holder.durationTV.text = songDuration
}
class SongListViewHolder(itemView: View):RecyclerView.ViewHolder(itemView){
var songTV:TextView
var durationTV:TextView
var albumnAtr:ImageView
init {
songTV = itemView.findViewById(R.id.song_name_tv)
durationTV = itemView.findViewById(R.id.song_duration_tv)
albumnAtr = itemView.findViewById(R.id.al_image_view)
}
}
}
这是来自 SongModel 的代码:
package com.example.zevamusic.model
class SongModel(songName: String,songDuration:String) {
var mSongName = songName
var mSongDuration = songDuration
}
我正在基于视频剪辑制作这个应用程序,我注意到其中有我没有的导入(import kotlinx.android.synthetic.main.activity_main.*),我决定添加它,但由于某种原因word android 在这个导入中亮起红色,我尝试修复导入中的问题,但我仍然没有弄清楚问题是什么。
您添加布局管理器的语法是错误的。 您可以通过两种方式添加布局管理器。
layoutManager
不是LayoutManager
。// deafault orientation is VERTICAL. replace the context accordingly.
recyclerView.layoutManager = LinearLayoutManager( context, RecyclerView.HORIZONTAL, false)
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
//like here
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
//you can also set orientation like this
android:orientation="vertical"