片段未显示在主屏幕中

时间:2018-01-27 12:59:12

标签: java android android-fragments kotlin

我正在制作一个音乐播放器,我为此制作了一些片段。我正在使用主屏幕片段,它显示设备中的歌曲列表。但是当我试图打开应用程序时,它会向我显示一个空白屏幕。我还在我的回收站视图中将此片段附加到所有歌曲选项,再次当我点击所有歌曲选项时,它会向我显示空白屏幕。问题是什么,我遗漏了什么。

这是我的MainActivity.kt文件和MainScreenFragment.kt文件的代码。

MainActivity.kt

类MainActivity:AppCompatActivity(){

var getSongList : ArrayList<Songs>? = null
var nowPlayingBottomBar: RelativeLayout?=null
var playPauseButton: ImageView?=null
var songTitle: TextView?=null
var visibleLayout: RelativeLayout?=null
var noSongs: RelativeLayout?=null
var recyclerView: RecyclerView?= null

var myActivity:Activity?=null

var _mainScreenAdapter : MainScreenAdapter?=null

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {

    val view = inflater?.inflate(R.layout.content_main, container, false)
    setHasOptionsMenu(true)
    activity.title = "All songs"
    visibleLayout = view?.findViewById<RelativeLayout>(R.id.visibleLayout)
    noSongs = view?.findViewById<RelativeLayout>(R.id.noSongs)
    nowPlayingBottomBar = view?.findViewById<RelativeLayout>(R.id.hiddenBarMainScreen)
    songTitle = view?.findViewById<TextView>(R.id.songTitleMainScreen)
    playPauseButton = view?.findViewById<ImageButton>(R.id.playpauseButton)
    (nowPlayingBottomBar as RelativeLayout).isClickable = false
    recyclerView = view?.findViewById<RecyclerView>(R.id.contentMain)

    if (getSongList == null) {
        getSongList = getSongsFromPhone()
        if (getSongList == null) {
            visibleLayout?.visibility = View.INVISIBLE
            noSongs?.visibility = View.VISIBLE
        }
    } else {
        Log.d(MainScreenFragment::class.java.simpleName, " Data already there")
    }



    getSongList = getSongsFromPhone()
    _mainScreenAdapter = MainScreenAdapter(getSongList as ArrayList<Songs>, activity)
    val mLayoutManager = LinearLayoutManager(activity)
    (recyclerView as RecyclerView).layoutManager = mLayoutManager
    (recyclerView as RecyclerView).itemAnimator = DefaultItemAnimator()
    (recyclerView as RecyclerView).adapter = _mainScreenAdapter
    return view



    // Inflate the layout for this fragment
   /* val view = inflater!!.inflate(R.layout.fragment_main_screen, container, false)
    visibleLayout = view?.findViewById<RelativeLayout>(R.id.visibleLayout)
    noSongs = view?.findViewById<RelativeLayout>(R.id.noSongs)
    nowPlayingBottomBar = view?.findViewById<RelativeLayout>(R.id.hiddenBarMainScreen)
    songTitle = view?.findViewById<TextView>(R.id.songTitleMainScreen)
    playPauseButton = view?.findViewById<ImageButton>(R.id.playPauseButton)
    recyclerView = view?.findViewById<RecyclerView>(R.id.contentMain)


    return view*/
}

fun getSongsFromPhone(): ArrayList<Songs>{
    var arrayList = ArrayList<Songs>()
    var contentResolver = myActivity?.contentResolver
    var songUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
    var songCursor = contentResolver?.query(songUri, null, null, null, null)
    if(songCursor!=null && songCursor.moveToFirst()){
        val songId = songCursor.getColumnIndex(MediaStore.Audio.Media._ID)
        val SongTitle = songCursor.getColumnIndex((MediaStore.Audio.Media.TITLE))
        val songArtist = songCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)
        val songData = songCursor.getColumnIndex(MediaStore.Audio.Media.DATA)
        val dateIndex = songCursor.getColumnIndex(MediaStore.Audio.Media.DATE_ADDED)

        while(songCursor.moveToNext()){
            var currentId = songCursor.getLong(songId)
            var currentTitle = songCursor.getString(SongTitle)
            var currentArtist = songCursor.getString(songArtist)
            var currentData = songCursor.getString(songData)
            var currentDate = songCursor.getString(dateIndex)
        }
    }
    return arrayList
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    getSongList = getSongsFromPhone()
   _mainScreenAdapter = MainScreenAdapter(getSongList as ArrayList<Songs>, myActivity as Context)
    val mLayoutManager = LinearLayoutManager(myActivity)
    recyclerView?.layoutManager = mLayoutManager
    recyclerView?.itemAnimator = DefaultItemAnimator()
    recyclerView?.adapter = _mainScreenAdapter
}


override fun onAttach(context: Context?) {
    super.onAttach(context)
    myActivity = context as Activity
}

override fun onAttach(activity: Activity?) {
    super.onAttach(activity)
    myActivity = activity
}

}

MainScreenFragment.kt

class MainScreenFragment:Fragment(){

var myBook = new Book(){ Author = "John S.", ISBN = null };

}

1 个答案:

答案 0 :(得分:0)

这是一个抽象的

  private void setUpRecycler() {
    noteAdapter = new NoteAdapter(noteModelList, v.getContext());
    layoutManager = new LinearLayoutManager(v.getContext(), LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.addItemDecoration(new DividerItemDecoration(v.getContext(), DividerItemDecoration.VERTICAL));
    recyclerView.setAdapter(noteAdapter);
}

//现在加载数据时,再次调用

noteAdapter = new NoteAdapter(noteModelList, v.getContext());
        recyclerView.setAdapter(noteAdapter);
        noteAdapter.notifyDataSetChanged();