アーティストのリストを作成しました。これをクリックすると、アルバムのリストが表示されます。アイデアは、アルバムをクリックすると、曲のリストが表示されるということです。
残念ながら、このアクティビティでは 2 つのリストビューが生成されているため、2 番目の「onItemClick」メソッドは Eclipse で「重複」としてフラグが立てられます。誰でもこれを修正する方法を知っていますか?
主なアクティビティ コードは次のとおりです。
package music.library;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MusicLibrary extends Activity implements OnItemClickListener {
Cursor cursor;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String[] columns = {
MediaStore.Audio.Artists._ID,
MediaStore.Audio.Artists.ARTIST };
cursor = managedQuery(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,
columns, null, null, null);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setOnItemClickListener(this);
String[] displayFields = new String[] { MediaStore.Audio.Artists.ARTIST };
int[] displayViews = new int[] { R.id.artistItem };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.artist_item, cursor, displayFields, displayViews);
listView.setAdapter(adapter);
}
@SuppressWarnings("deprecation")
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
if (cursor.moveToPosition(position)) {
String[] columns = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ALBUM,
};
String where = android.provider.MediaStore.Audio.Media.ARTIST
+ "=?";
String whereVal[] = { cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Albums.ARTIST)) };
String orderBy = android.provider.MediaStore.Audio.Media._ID;
cursor = managedQuery(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, columns,
where, whereVal, orderBy);
ListView listView = (ListView) findViewById(R.id.listView);
String[] displayFields = new String[] { MediaStore.Audio.Media.ALBUM };
int[] displayViews = new int[] { R.id.albumItem };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.album_item, cursor, displayFields, displayViews);
listView.setAdapter(adapter);
}
}
@SuppressWarnings("deprecation")
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
if (cursor.moveToPosition(position)) {
String[] columns = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DISPLAY_NAME,
};
String where = MediaStore.Audio.Media.ALBUM
+ "=?";
String whereVal[] = { cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Albums.ALBUM)) };
String orderBy = MediaStore.Audio.Media._ID;
cursor = managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, columns,
where, whereVal, orderBy);
ListView listView = (ListView) findViewById(R.id.listView);
String[] displayFields =
new String[] { MediaStore.Audio.Media.DISPLAY_NAME };
int[] displayViews = new int[] { R.id.songItem };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.song_item, cursor, displayFields, displayViews);
listView.setAdapter(adapter);
}
}
}
ご協力いただきありがとうございます。
- - 編集 - -
答えてくれてありがとう。すべての回答は素晴らしいものでしたが、意見をさまざまな活動に分けることが最も理にかなっているように見えるため、私はdymmehの回答を「受け入れられた」回答として選択しました(これが私が探していたと述べたものではない場合でも最初の質問)。
私は最終的に以下を作成しました:
アーティストを表示するファーストクラス:
package music.library;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MusicLibrary extends Activity implements OnItemClickListener {
Cursor cursor;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String[] columns = {
MediaStore.Audio.Artists._ID,
MediaStore.Audio.Artists.ARTIST
};
cursor = managedQuery(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,
columns, null, null, null);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setOnItemClickListener(this);
String[] displayFields = new String[] { MediaStore.Audio.Artists.ARTIST };
int[] displayViews = new int[] { R.id.artistItem };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.artist_item, cursor, displayFields, displayViews);
listView.setAdapter(adapter); }
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
if (cursor.moveToPosition(position)) {
String where = android.provider.MediaStore.Audio.Media.ARTIST
+ "=?";
String whereVal[] = { cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Albums.ARTIST)) };
Intent intent = new Intent(MusicLibrary.this, AlbumSelection.class);
intent.putExtra("where", where);
intent.putExtra("whereVal", whereVal);
startActivity(intent);
}
}
}
2 番目のクラス、アルバムを表示:
package music.library;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class AlbumSelection extends Activity implements OnItemClickListener {
Cursor cursor;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bundle extras = getIntent().getExtras();
String where = extras.getString("where");
String[] whereVal = extras.getStringArray("whereVal");
String[] columns = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ALBUM,
};
String orderBy = android.provider.MediaStore.Audio.Media._ID;
cursor = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
columns, where, whereVal, orderBy);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setOnItemClickListener(this);
String[] displayFields = new String[] { MediaStore.Audio.Media.ALBUM };
int[] displayViews = new int[] { R.id.albumItem };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.album_item, cursor, displayFields, displayViews);
listView.setAdapter(adapter); }
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
if (cursor.moveToPosition(position)) {
String where = android.provider.MediaStore.Audio.Media.ALBUM
+ "=?";
String whereVal[] = { cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Albums.ALBUM)) };
Intent intent = new Intent(AlbumSelection.this, SongSelection.class);
intent.putExtra("where", where);
intent.putExtra("whereVal", whereVal);
startActivity(intent);
}
}
}
3 番目のクラス、曲を表示:
package music.library;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class SongSelection extends Activity implements OnItemClickListener {
Cursor cursor;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bundle extras = getIntent().getExtras();
String where = extras.getString("where");
String[] whereVal = extras.getStringArray("whereVal");
String[] columns = {
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.MIME_TYPE,
};
String orderBy = android.provider.MediaStore.Audio.Media.TITLE;
cursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
columns, where, whereVal, orderBy);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setOnItemClickListener(this);
String[] displayFields = new String[] { MediaStore.Audio.Media.TITLE };
int[] displayViews = new int[] { R.id.songItem };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.song_item, cursor, displayFields, displayViews);
listView.setAdapter(adapter); }
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
if (cursor.moveToPosition(position)) {
/*Intent intent = new Intent(AlbumSelection.this, SongSelection.class);
intent.putExtra("ARTIST", artist);
startActivity(intent);
*/
}
}
}
そして、それはすべてうまく機能しています。
すべての応答に感謝します。このコードを整理/効率化する方法について、フィードバックをお待ちしております。
再度、感謝します。