2010-09-19 16 views
0

Я новичок в разработке Android, и я работаю над приложением для медиаплеера как учебного опыта. В настоящее время я пытаюсь добавить представление меню, которое использует обложку альбома в gridview. Вот мой код:Альбом Android Art GridView

public class coverMenu extends Activity { 

private Cursor audioCursor; 
public String artistInput; 
private static final String TAG = "coverMenu"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     setContentView(R.layout.cover); 
     Bundle data = this.getIntent().getExtras(); 
     String artistKey = data.getString("artistPass"); 


     Toast.makeText(this, artistKey, Toast.LENGTH_LONG).show(); 

     audioCursor = getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, 
     MediaStore.Audio.Albums.ARTIST + "='" + artistKey + "'", null,MediaStore.Audio.Albums.ALBUM + " ASC"); 
     startManagingCursor(audioCursor); 

     String[]from = new String[]{MediaStore.Audio.Albums.ALBUM_ART}; 


     int[] to = new int []{android.R.id.text1}; 

     ListAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, 
      audioCursor, from, to); 
     GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setAdapter(mAdapter); 

Моя проблема заключается в том, что элемент сетки теперь отображается путь к искусству, но не показывает этого. Может ли кто-нибудь помочь мне, объяснив, как разобрать это в растровое изображение и отправить его в gridview?

Я потратил некоторое время на просмотр музыкального плеера Android, но не могу найти простое решение.

Любая помощь приветствуется.

[Последние Debug:]

DalvikVM[localhost:8615]  
    Thread [<3> main] (Suspended (exception RuntimeException)) 
     ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2496 
     ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2512 
     ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 119 
     ActivityThread$H.handleMessage(Message) line: 1863 
     ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
     Looper.loop() line: 123 
     ActivityThread.main(String[]) line: 4363  
     Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
     Method.invoke(Object, Object...) line: 521 
     ZygoteInit$MethodAndArgsCaller.run() line: 860 
     ZygoteInit.main(String[]) line: 618 
     NativeStart.main(String[]) line: not available [native method] 
    Thread [<13> Binder Thread #2] (Running)  
    Thread [<11> Binder Thread #1] (Running)  
    Thread [<15> Binder Thread #3] (Running) 

ответ

0

Вам нужно создать пользовательский класс адаптера, который возвращает заполненный элемент в виде сетки, основываясь на позиции курсора. Вот довольно грубый пример.

custom_grid_item.xml:

<LinearLayout android:id="@+id/LinearLayout01" 
android:layout_width="fill_parent" android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<ImageView android:id="@+id/album_image" 
android:layout_height="wrap_content" android:layout_width="wrap_content"> 
</ImageView> 
</LinearLayout> 

MySimpleListAdapter.java:

import java.io.File; 
import android.content.Context; 
import android.database.Cursor; 
import android.graphics.drawable.BitmapDrawable; 
import android.net.Uri; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.ImageView.ScaleType; 

public class MySimpleListAdapter extends SimpleCursorAdapter { 

private Context mContext; 

public MySimpleListAdapter(Context context, int layout, Cursor c, 
     String[] from, int[] to) { 
    super(context, layout, c, from, to); 
    mContext = context; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View v; 
    ImageView iv; 
    if (convertView != null) 
     v = convertView; 
    else { 
     LayoutInflater layout = LayoutInflater.from(mContext); 
     v = layout.inflate(R.layout.custom_grid_item, null); 
    } 

    this.getCursor().moveToPosition(position); 

    iv = (ImageView) v.findViewById(R.id.album_image); 

    iv.setImageURI(Uri.fromFile(new File(this.getCursor().getString(9)))); 
    iv.setScaleType(ScaleType.CENTER_INSIDE); 
    return v; 

}} 

активность:

import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.widget.GridView; 
import android.widget.Toast; 

public class CoverMenu extends Activity { 
private Cursor audioCursor; 
public String artistInput; 
private static final String TAG = "coverMenu"; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

// Set to some artist you know 
String artistKey = "Devo"; 

Toast.makeText(this, artistKey, Toast.LENGTH_LONG).show(); 

audioCursor = getContentResolver().query(
     MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, 
     MediaStore.Audio.Albums.ARTIST + "='" + artistKey + "'", null, 
     MediaStore.Audio.Albums.ALBUM + " ASC"); 
startManagingCursor(audioCursor); 

String[] from = new String[] { MediaStore.Audio.Albums.ALBUM_ART }; 

int[] to = new int[] { android.R.id.text1 }; 

MySimpleListAdapter mAdapter = new MySimpleListAdapter(this, 
     android.R.layout.simple_list_item_1, audioCursor, from, to); 

GridView gridview = (GridView) findViewById(R.id.gridview); 
gridview.setAdapter(mAdapter); 
}} 

Заканчивать это хорошее видео от Google I/O on creating custom listviews, это будет большая помощь вы в будущем.

+0

Ловля силы при нажатии на список «artist», который ведет к основному действию. – Josh

+0

резьба [<3> главная] (Подвесная (исключение RuntimeException)) \t \t ActivityThread.performLaunchActivity (ActivityThread $ ActivityRecord, Намерение) линия: 2496 \t \t ActivityThread.handleLaunchActivity (ActivityThread $ ActivityRecord, Намерение) линия: 2512 \t \t ActivityThread. доступ к $ 2200 (ActivityThread, – Josh

+0

ActivityThread $ ActivityRecord, Намерение) линия: 119 \t \t ActivityThread $ H.handleMessage (сообщение) линии: 1863 \t \t ActivityThread $ H .dispatchMessage (сообщение) линии (Обработчик): 99 \t \t Looper.loop() строка: 123 \t \t ActivityThread.main (String []) линия: 4363 \t \t Method.invokeNative (Object, Object [], класс [], класс, INT, логическое, класс) линии : не доступен [нативный метод] \t \t Method.invoke (Object, Object ...) строка: 521 \t \t ZygoteInit $ MethodAndArgsCaller.run) линия (([] String) строка 860 \t \t ZygoteInit.main: 618 \t \t NativeStart.main (String []) строка: недоступна [собственный метод] – Josh

Смежные вопросы