Özel bağdaştırıcı kullanarak bir liste etkinliğine erişmeye çalışıyorum.İyi çalışan herhangi bir özel bağdaştırıcı kullanmadan doğrudan denedim ama liste görünümünde daha fazla işlev eklemek istiyorum çünkü uygulamak istiyorum özel adaptör.Şimdi denedim ama hiçbir veri görünür boş liste görünümü alıyorum. Liste-AktiviteÖzel simpleCursorAdapter kullanma
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-Adaptör
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;
}
}
Liste görünümünde veri alabiliyorum ancak tüm satırlarda yalnızca ilk satır verileri görünüyor. Güncellenen sorumu kontrol edin. –
Ne değiştirdiğini biraz karıştırdım ama yukarıda bahsettiğim iki yönteme geçmelisin. Her iki durumda da karşılaştığınız problemi imleç indeksini hareket ettirmiyorsunuz. İmleci veriyi çekmeden önce cr.moveToPosition (konum) 'u çağırmalısınız. ConvertView öğesinin boş olup olmadığını kontrol etmediğiniz için yeni görünümlerin şişirilmesi ihtiyacını azaltmak için newView bindView yöntemlerini değiştirin. – Bobbake4
Ayrıca, imleçte depolanan gerçek veriler değil de sütunların dizinini yazdırıyorsunuz. – Bobbake4