-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

看看简单直接的教程How to create a ListView using ArrayAdapter in Android

您需要生成一个字符串数组并将该数组附加到一个数组适配器

adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, YourStringArray);

然后将此适配器插入您的 ListView

yourListView.setAdapter(adapter);

ArrayAdapter<YourItem>或者您可以通过扩展和附加YourItem数组来创建自己的自定义适配器。

于 2013-04-13T12:26:22.370 回答
0

我建议您创建一个自定义以按照您想要的方式从您的对象ArrayAdapter中填充 a 。ListView

这种技术的优点是您获得了一种视图回收机制,该机制将回收Views您的内部ListView以减少内存消耗。

简而言之,您必须:

1.创建一个代表单行数据的对象。

2.创建ArrayList这些对象中的一个。

3.创建一个包含 ListView 的布局或使用代码将 ListView 添加到您的主布局。

4.创建单行布局。

5.创建一个ViewHolder从 的角度代表数据行的视觉方面Views

6.创建一个自定义ArrayAdapter,将根据您的需要填充行,在其中您将覆盖该getView方法以准确指定行数据将是什么。

7.最后把这个分配ArrayAdapter给你的ListViewin onCreate

通过阅读我写的这篇博文,您可以了解如何实现这一点:

创建自定义 ArrayAdapter

于 2013-04-13T13:39:34.163 回答