Ich versuche, eine Liste-Aktivität mit benutzerdefinierten Adapter zugreifen.Ich habe es direkt ohne Verwendung eines benutzerdefinierten Adapters versucht es funktionierte gut, aber weil ich weitere Funktionen in List-View hinzufügen möchte ich ein implementieren Custom adapter.Jetzt habe ich es versucht, aber ich bekomme eine leere Listenansicht ohne sichtbare Daten. List-AktivitätVerwendung benutzerdefinierter 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);
}
}
Gewohnheit-Adapter
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;
}
}
Ich bin in der Lage, Daten in der Listenansicht zu erhalten, aber nur erste Zeile Daten erscheint in allen Zeilen.Überprüfen Sie meine aktualisierte Frage. –
Ich bin ein bisschen verwirrt, was Sie geändert haben, aber Sie sollten zu den beiden oben genannten Methoden wechseln. Wie auch immer ich denke, das Problem, das Sie haben, ist, dass Sie den Cursor-Index nicht bewegen. Sie sollten cr.moveToPosition (position) aufrufen, bevor Sie Daten aus dem Cursor ziehen. Wechseln Sie die newView-bindView-Methoden, um das Aufblähen neuer Ansichten zu reduzieren, da Sie nicht überprüfen, ob convertView null ist, und sie erneut verwenden. – Bobbake4
Sie drucken auch den Index der Spalten, nicht die tatsächlichen Daten, die im Cursor gespeichert sind. – Bobbake4