사용자 정의 어댑터를 사용하여 목록 활동에 액세스하려고합니다. 제대로 작동하는 사용자 정의 어댑터를 사용하지 않고 직접 시도했지만 목록보기에 더 많은 기능을 추가하려고하기 때문에 사용자 정의 adapter.Now 그것을 시도했지만 데이터가 표시되지 않은 빈 목록보기지고있다. 목록-활동사용자 정의 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);
}
}
맞춤 어댑터
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;
}
}
목록보기에서 데이터를 가져올 수 있지만 첫 번째 행 데이터 만 모든 행에 나타납니다. 업데이트 된 질문을 확인하십시오. –
나는 조금 혼란스러워하지만 위에서 언급 한 두 가지 방법으로 전환해야합니다. 어쨌든 나는 당신이 겪고있는 문제가 커서 인덱스를 움직이지 않는다고 생각합니다. 커서에서 데이터를 꺼내기 전에 cr.moveToPosition (position)을 호출해야합니다. newView bindView 메소드를 전환하면 convertView가 null인지 확인하고 다시 사용하지 않아도 새 뷰를 팽창시킬 필요가 줄어 듭니다. – Bobbake4
커서의 실제 데이터가 아닌 열의 색인도 인쇄합니다. – Bobbake4