Sto tentando di accedere a un'attività elenco utilizzando un adattatore personalizzato. L'ho provato direttamente senza utilizzare alcun adattatore personalizzato funzionava bene ma perché voglio aggiungere più funzioni in lista-vista Voglio implementare un adattatore personalizzato. Ora ho provato, ma sto ottenendo una lista-vista vuota senza dati visibili. List-ActivityUtilizzo di custom simpleCursorAdapter
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String[] projection = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DURATION,
};
//query
musiccursor = this.managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,projection,selection,null,sortOrder);
music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
int a[]= new int[]{R.id.TitleSong,R.id.Artist};
Custom_Adapter adapter = new Custom_Adapter(this,R.layout.music_items, musiccursor, new String[]{MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.ARTIST} ,a);
this.setAdapter(adapter);
}
}
Custom-adattatore
public class Custom_Adapter extends SimpleCursorAdapter {
private Context mContext;
private Context appContext;
private int layout;
private Cursor cr;
private final LayoutInflater inflater;
public Custom_Adapter(Context context,int layout, Cursor c,String[] from,int[] to) {
super(context,layout,c,from,to);
this.layout=layout;
this.mContext = context;
this.inflater=LayoutInflater.from(context);
this.cr=c;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
super.bindView(view, context, cursor);
view=inflater.inflate(layout, null, false);
TextView titleS=(TextView)view.findViewById(R.id.TitleSong);
TextView artistS=(TextView)view.findViewById(R.id.Artist);
int Title_index;
int Artist_index;
cursor.moveToFirst();
while(cursor.isLast()){
Title_index=cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
Artist_index=cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST);
titleS.setText(cursor.getString(Title_index));
artistS.setText(cursor.getString(Artist_index));
cr.moveToNext();
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return convertView;
}
}
Sono in grado di ottenere dati nella visualizzazione elenco ma solo i dati della prima riga vengono visualizzati in tutte le righe. Controllare la mia domanda aggiornata. –
Sono un po 'confuso su cosa hai cambiato, ma dovresti passare ai due metodi che ho menzionato sopra. In entrambi i casi, penso che il problema che stai riscontrando sia che non stai spostando l'indice del cursore. Dovresti chiamare cr.moveToPosition (posizione) prima di estrarre i dati dal cursore. Cambia i metodi newView bindView per ridurre la necessità di gonfiare nuove viste poiché non stai controllando se convertView è nullo e riutilizzandolo. – Bobbake4
Si sta inoltre stampando l'indice delle colonne non i dati effettivi memorizzati nel cursore. – Bobbake4