0

嗨,我在下面提供了我的代码。我有一个主 UI 线程和一个手动线程。我正在更新线程内的 listView 并在适配器和列表视图中使用它来填充。但问题是,一旦活动开始,列表就是空的,只有当配置发生变化时,它才会使用适配器进行更新。有什么问题吗?我的线程只有在 oncreate 完成后才开始?请留下光标部分,因为我很好地获得了所有值。请帮助我的朋友。

public class MediaActivity extends Activity {
private static final String TAG = null;
ExpandableListView expList ;
ExpandableListAdapter expListAdapter;
static ArrayAdapter<String> ap;
static List<String> albumHead = new ArrayList<String>();
static HashMap<String, List<String>> albumChild = new HashMap<String, List<String>>();
static Cursor albumCursor;
AlbumThread albumThread;

@Override
protected void onStart() {

    super.onStart();
    albumThread = new AlbumThread();
    albumThread.start();
    Log.d(TAG , "albumThread Started");
}

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

    ListView expList = (ListView)findViewById(R.id.mediaList);

    ap = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, albumHead);

    if(!albumHead.isEmpty()){
    expList.setAdapter(ap);
    } else {
        Toast makeToast = Toast.makeText(getApplicationContext(), "albumHead is empty" , Toast.LENGTH_LONG);
        makeToast.show();
    }
}

private static class AlbumThread extends Thread{
    Context appContext = MediaApp.getAppContext();

    List<String> songList = new ArrayList<String>();

    public AlbumThread() {
        super("myThread");

    }
    @Override
    public void run() {
        // Query Media Contents from MediaStore.Audio.Media.EXTERNAL_CONTENT_URI         
        super.run();
        ContentResolver albumResolver = appContext.getContentResolver();
        Uri mediaContentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String[] mediaColumns = {
                MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.ALBUM,
                MediaStore.Audio.Media.DATA,
                MediaStore.Audio.Media.DISPLAY_NAME,                                        
            };

        String mediaSort = " " + MediaStore.Audio.Media.ALBUM + " ASC" + "," + MediaStore.Audio.Media.DISPLAY_NAME + " ASC"; 

        albumCursor = albumResolver.query(mediaContentUri, mediaColumns, null, null, mediaSort);


        //Extract values from Cursor
        if(albumCursor.moveToFirst()){
            do{
                int albumIdx = albumCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM);
                int songIdx = albumCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);


                String albumString = albumCursor.getString(albumIdx);
                String songString = albumCursor.getString(songIdx);


            if(!albumHead.contains(albumString)){
                albumHead.add(albumString); 
                ap.notifyDataSetChanged();
            }
            if(albumHead.contains(albumString)){

                songList.add(songString);
                albumChild.put(albumString, songList);
            } 
            }while (albumCursor.moveToNext());

        }

    }       

}

@Override
protected void onStop() {

    super.onStop();
    albumThread = null;
    Log.d(TAG, "albumThread stopped yapee");
}

}

4

0 回答 0