-1

我想單擊網格中的相冊來顯示歌曲列表。爲什麼這個遊標適配器代碼不工作?

這裏是我的代碼爲DisplayAlbum擴展AppCompatActivity實現LoaderManager.LoaderCallbacks

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.album_detail); 
    Intent i = getIntent(); 
    b = i.getExtras(); 
    String str; 
// if((str =(String) b.getCharSequence("album_name"))!= null) 
//  Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show(); 
    val = new String[]{(String) b.getCharSequence("album_name")}; 


    ListView lv = (ListView) findViewById(R.id.al_songs); 
    mAdapter = new DisplaySongsAdapter(this, null); 
    lv.setAdapter(mAdapter); 


} 


static final String[] ALBUM_DETAIL_PROJECTION = { MediaStore.Audio.Media._ID,MediaStore.Audio.Media.ALBUM_ID,MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.DURATION}; 
String where = MediaStore.Audio.Media.ALBUM + "=?"; 




public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
    String orderby = MediaStore.Audio.Media.TITLE; 
    return new CursorLoader(this, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,ALBUM_DETAIL_PROJECTION, where, val, orderby); 
} 

這是DisplaySongsAdapter的代碼擴展的CursorAdapter

  public DisplaySongsAdapter(Context context, Cursor c) { 
      super(context, c); 
      mcontext=context; 
      nInflater = LayoutInflater.from(context); 
     } 
     @Override 
     public void bindView(View view, Context context, Cursor cursor) { 
      TextView songTitle = (TextView) view.findViewById(R.id.songTitle); 
      songTitle.setText(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE))); 
      TextView alname = (TextView) view.findViewById(R.id.al_name); 
      alname.setText(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM))); 
      TextView artist = (TextView) view.findViewById(R.id.songArtist); 
      artist.setText(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST))); 

      ImageView albumArt = (ImageView) view.findViewById(R.id.list_image); 
      albumArt.setScaleType(ImageView.ScaleType.FIT_XY); 
      ImageView albumimg = (ImageView) view.findViewById(R.id.al_art); 
      albumimg.setScaleType(ImageView.ScaleType.FIT_XY); 

      ImageButton listmenu = (ImageButton) view.findViewById(R.id.expanded_menu); 
      listmenu.setOnClickListener(overflowClickListener); 



      Long albumId = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID)); 

      Bitmap img = getAlbumart(context,albumId); 
      if(img != null) { 
       albumArt.setImageBitmap(img); 
       albumimg.setImageBitmap(img); 
      } 

      else{ 
       Bitmap def = getDefaultAlbumArt(context); 
       albumArt.setImageBitmap(def); 
       albumimg.setImageBitmap(img); 
      } 

     } 


     @Override 
     public View newView(Context context, Cursor cursor, ViewGroup parent) { 
      final View view = nInflater.inflate(R.layout.song_item, parent, false); 
      return view; 
     } 

但活動犯規填充ListView。它只是顯示一個空白的膨脹佈局。爲什麼會這樣?我哪裏做錯了?

回答

0

這可能涉及到的事實,你實際上不喂任何項目在適配器:-)

mAdapter = new DisplaySongsAdapter(this, null); 
+0

我應該在那裏餵食?我使用了類似的代碼片段。但是我們有getLoaderManager()。initLoader()..這裏應該是什麼替代品? –

0

我解決它使用SimpleCursorAdapter。不過,我仍然想知道如何使用LoaderManager