-1

作成しようとしている mp3 プレーヤーのコードを書いています。私はプロジェクトを開始したばかりで、SD カードにあるすべての mp3 ファイルを読み取って表示できるようにしたいと考えています。ダイレクトパス方式は使いたくない 私が書いたこのコードは、すべての mp3 ファイルを収集しますが、唯一の問題は、それらが画面に表示されないことです。アプリは空白の画面を表示しますが、クラッシュしません。

私は家庭教師から助けとアドバイスを受け、ArrayAdapter を使用して結果を表示するように言われましたが、それを表示するための助けが見つかりません。誰かが助けてくれれば、それは素晴らしいことです。

onCreate メソッドのコードは次のとおりです。

ListView list;
Cursor cursor;
int columnIndex;
int count;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //list = (ListView) findViewById(R.id.list);

    //A array is created that display the 3 fields
    String[] displayMusic = {MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.TITLE};
    //the cursor displays all of the audio in the sd card, just to limit to .mp3 files now
    cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, displayMusic, null, null, null);

    //this is the loop that gather all of the .mp3 files
    int pos = 1;
    ArrayList<String> listOfMp3s = new ArrayList<String>();
    while (cursor.moveToNext())
    {
        if(cursor.getString(pos).endsWith("mp3"))
        {
            listOfMp3s.add(cursor.getString(pos));
        }
    }


    String[] displayFields = new String[] {MediaStore.Audio.Media.DISPLAY_NAME};
    int[] displayViews = new int[] {android.R.id.text1};
    //setListAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, displayFields, displayViews);
    ArrayAdapter<String> musicAdapter = new ArrayAdapter<String>(getBaseContext(), R.layout.list_songs, listOfMp3s);
    //list.setAdapter(listOfMp3s);
 }
4

2 に答える 2

0

カスタムを作成して、オブジェクトから必要な方法でArrayAdapterデータを取り込むことをお勧めします。ListView

この手法の利点は、メモリの消費を抑えるためにViews内部をリサイクルするビュー リサイクル メカニズムを利用できることです。ListView

要するに、次のことを行う必要があります。

1.単一行のデータを表すオブジェクトを作成します。

2.ArrayListこれらのオブジェクトの を作成します。

3. ListView を含むレイアウトを作成するか、コードを使用してメイン レイアウトに ListView を追加します。

4. 1 行のレイアウトを作成します。

5.ViewHolderの観点からデータ行の視覚的側面を表す を作成しますViews

6.ArrayAdapter必要に応じて行を移入するカスタムを作成します。その中でgetView、行データが何であるかを正確に指定するメソッドをオーバーライドします。

7.最後に、これArrayAdapterListViewinに割り当てますonCreate

これを実装する方法については、私が書いた次のブログ投稿を読むことで理解できます。

カスタム ArrayAdapter を作成する

于 2013-04-13T13:39:34.163 に答える