-1

I am creating a music player and I have made some fragments for this. I am using Main Screen Fragment which shows the list of the songs in the device. But when I am trying to open the app it is showing me a blank screen. I also attached this fragment to All songs option in my recycler view, again when I am clicking on the All songs option it is showing me the blank screen. What is the problem, where I am missing something.

here is the code of my MainActivity.kt file and MainScreenFragment.kt File.

MainActivity.kt

class MainActivity : AppCompatActivity(){

var navigationDrawerIconList : ArrayList<String> = arrayListOf()

var images_for_navdrawer = intArrayOf(R.drawable.navigation_allsongs, R.drawable.navigation_favorites,
        R.drawable.navigation_settings, R.drawable.navigation_aboutus)

object Statified{
    var drawerLayout : DrawerLayout?=null
}


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


    setContentView(R.layout.activity_main)
    val toolbar = findViewById<Toolbar>(R.id.toolbar)
    setSupportActionBar(toolbar)
   MainActivity.Statified.drawerLayout=findViewById(R.id.drawer_layout)

   // drawerLayout=findViewById<DrawerLayout>(R.id.drawer_layout) as DrawerLayout


    navigationDrawerIconList.add("All Songs")
    navigationDrawerIconList.add("Favorites")
    navigationDrawerIconList.add("Settings")
    navigationDrawerIconList.add("About Us")

    val toggle = ActionBarDrawerToggle(this@MainActivity, MainActivity.Statified.drawerLayout, toolbar,
            R.string.navigation_drawer_open, R.string.navigation_drawer_close)
    MainActivity.Statified.drawerLayout?.setDrawerListener(toggle)
    toggle.syncState()

    val mainScreenFragment = MainScreenFragment()
    this.supportFragmentManager
            .beginTransaction()
            .add(R.id.details_fragment, mainScreenFragment, "MainScreenFragment")
            .commit()




    //Navigation Drawer

    var _navigationAdapter = NavigationDrawerAdapter(navigationDrawerIconList, images_for_navdrawer, this@MainActivity)

    _navigationAdapter.notifyDataSetChanged()

    var navigation_recycler_view = findViewById<RecyclerView>(R.id.navigation_recycler_view)
    navigation_recycler_view.layoutManager = LinearLayoutManager(this@MainActivity)
    navigation_recycler_view.itemAnimator = DefaultItemAnimator()
    navigation_recycler_view.adapter = _navigationAdapter
    navigation_recycler_view.setHasFixedSize(true)


  //  var navigation_recycler_view = findViewById<RecyclerView>(R.id.navigation_recycler_view)
    //navigation_recycler_view.layoutManager = LinearLayoutManager(this)
    //navigation_recycler_view.itemAnimator = DefaultItemAnimator()

}

override fun onStart() {
    super.onStart()
}

}

MainScreenFragment.kt

class MainScreenFragment : Fragment() {

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
}

}

1 Answers1

0

here is an abstract

  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);
}

//now when you load data,call again

noteAdapter = new NoteAdapter(noteModelList, v.getContext());
        recyclerView.setAdapter(noteAdapter);
        noteAdapter.notifyDataSetChanged();
hemen
  • 1,460
  • 2
  • 16
  • 35