Member 14078757 Ответов: 0

Listview не отображается на вкладках в моем tabhost


Я пытаюсь отобразить список песен из хранилища на вкладке TracksActivity с моего TabHost. Я следовал учебнику о том, как отображать песни из хранилища в ListView, но после запуска он ничего не показывает в ListView, и в журнале нет ошибок. Простите меня, если это глупая ошибка, но я все еще нуб.

Что я уже пробовал:

TracksActivity:

public class TracksActivity extends Activity {

private static final int MY_PERMISSION_REQUEST = 1;

ArrayList<String> arrayList;

ListView trackList;

ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tracks_layout);

    if (ContextCompat.checkSelfPermission(TracksActivity.this,
            Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

        if (ActivityCompat.shouldShowRequestPermissionRationale(TracksActivity.this,
                Manifest.permission.READ_EXTERNAL_STORAGE)) {

            ActivityCompat.requestPermissions(TracksActivity.this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSION_REQUEST);

        } else {

            ActivityCompat.requestPermissions(TracksActivity.this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSION_REQUEST);
            }

        } else {

            doStuff();

    }

}

public void doStuff() {

    trackList = findViewById(R.id.trackList);
    arrayList = new ArrayList<>();
    getMusic();
    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, arrayList);
    trackList.setAdapter(adapter);

    trackList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int i, long I) {

        }
    });

}

public void getMusic() {

    ContentResolver contentResolver = getContentResolver();
    Uri songUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor songCursor = contentResolver.query(songUri, null,null,null,null);


    if (songCursor != null && songCursor.moveToFirst()) {

        int songTitle = songCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
        int songArtist = songCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
        int songLocation = songCursor.getColumnIndex(MediaStore.Audio.Media.DATA);

        do {

            String currentTitle = songCursor.getString(songTitle);

            String currentArtist = songCursor.getString(songArtist);

            String currentLocation = songCursor.getString(songLocation);

            arrayList.add("Title: " + currentTitle + "\n" + "Artist: " + currentArtist + "\n" + "Location: " + currentLocation);

        } while (songCursor.moveToNext());

    }

}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

    switch (requestCode) {

        case MY_PERMISSION_REQUEST: {

            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                if (ContextCompat.checkSelfPermission(TracksActivity.this,
                        Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {

                    Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();

                    doStuff();

                }

            } else {

                Toast.makeText(this,"No permission granted", Toast.LENGTH_SHORT).show();

                finish();

            }

            return;

        }

    }

}}


tracks_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<ListView
    android:id="@+id/trackList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerInParent="true" />

David Crow

Сколько элементов содержится в arrayList- А что насчет этого adapter Вызывается ли метод doStuff ()? Я не вижу try/catch блоки в вашем коде. Это намеренно?

0 Ответов