2013-05-28 2 views
2

저는 BaseAdapter의 getView() 메소드에서 모든 오디오 파일 (앨범 아트 포함)을 동적으로 검색하는 응용 프로그램을 개발 중입니다.ListView를 사용하여 BaseAdapter에서 ConvertView 런타임을 삭제하십시오.

지금 listView에서 터치하여 항목을 삭제할 수 있습니다. (예 : listView의 세 번째 항목을 클릭하면 세 번째 항목을 삭제하거나 삭제해야합니다.)

music_cursor 코드 :

String[] proj = { MediaStore.Audio.Media._ID, 
     MediaStore.Audio.Media.DATA, 
     MediaStore.Audio.Media.DISPLAY_NAME, 
     MediaStore.Video.Media.SIZE, MediaStore.Audio.Media.ARTIST, 
     MediaStore.Audio.Media.ALBUM_ID, MediaStore.Audio.Media.TITLE }; 

Cursor musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
     proj, null, null, null); 
int count = musiccursor.getCount(); 

어댑터 코드 :

public class MusicAdapter extends BaseAdapter { 
     private Context mContext; 

     public MusicAdapter(Context con) { 
      mContext = con; 
     } 
     public int getCount() { 
      return count; 
     } 
     public Object getItem(int position) { 
      return position; 
     } 
     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(final int position, View convertView, 
       ViewGroup parent) { 

      String id = null; 
      ViewHolder holder; 
      LayoutInflater inflater = getLayoutInflater(); 

      if (convertView == null) { 

       convertView = inflater.inflate(R.layout.sub_layout, null); 
       holder = new ViewHolder(); 

       holder.ID_ = (TextView) convertView.findViewById(R.id.txtSongName); 
       holder.SIZE_ = (TextView) convertView.findViewById(R.id.txtSongSize); 
       holder.ARTIST = (TextView) convertView.findViewById(R.id.txtSongArtist); 
       holder.TITLE_image = (ImageView) convertView.findViewById(R.id.imgArtWork); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      // code for retrieving audio name and set to textView 
      music_column_index = musiccursor 
        .getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME); 
      musiccursor.moveToPosition(position); 
      id = musiccursor.getString(music_column_index); 
      holder.ID_.setText(id); 
      holder.ID_.setTextSize(15); 

      // code for retrieving audioSize and set to textView 
      music_column_index = musiccursor 
        .getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE); 
      musiccursor.moveToPosition(position); 
      id = (musiccursor.getString(music_column_index) + " (KB)"); 
      holder.SIZE_.setText(id); 
      holder.SIZE_.setTextSize(15); 

      // code for retrieving audio_Artist name and set to textView 
      music_column_index = musiccursor 
        .getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST); 
      musiccursor.moveToPosition(position); 
      id = musiccursor.getString(music_column_index); 
      holder.ARTIST.setText(id); 
      holder.ARTIST.setTextSize(15); 

      // code for retrieving album-art(from albumid) and set to ImageView 

      musiccursor.moveToPosition(position); 
      album_id_long = musiccursor.getLong(musiccursor 
        .getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID)); 

      Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart"); 
      Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id_long); 
      ContentResolver res = MusicActivity.this.getContentResolver(); 
      InputStream in = null; 
      try { 
       in = res.openInputStream(uri); 
      } catch (FileNotFoundException e1) { 
       e1.printStackTrace(); 
      } 
      Bitmap artwork = BitmapFactory.decodeStream(in); 

      holder.TITLE_image.setImageBitmap(artwork); 

      convertView.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        //on this code of onClick,a selected item should be deleted 

       } 
      }); 

      return convertView; 
     } 

     private class ViewHolder { 
      TextView ID_; 
      TextView SIZE_; 
      TextView ARTIST; 
      ImageView TITLE_image; 
     } 
    } 

enter image description here

이 작업을 수행하는 또 다른 방법이 있다면. 강력하게 감사하겠습니다.

감사합니다.

답변

1

당신은

public void onListItemClick(ListView l, View v, int position, long id) 

당신이보기를 클릭

는,이 콜백이 호출됩니다 오버라이드 (override)합니다. 호출 될 때 DB에서 항목을 삭제하고 작성한 쿼리를 다시 실행하여 ListView을 채울 수 있습니다. 당신이 Activity 대신 ListActivity을 exteding하는 경우 OnItemClickListener

yourListView.setOnItemClickListener(
    new OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, 
       int position, long id) { 


      } 
     } 
); 
+1

무엇이 잘못되었는지 말해 줄 수 있습니까? ? – Blackbelt

+0

나는 그것을하지 않았다 @blackbelt – Rumit

+0

나는 당신을 비난하지 않았다 – Blackbelt

1

를 설정해야 당신이 실제로 음악 파일을 삭제하거나 ListView에에서 제거 하시겠습니까? 그건 그렇고, 당신은 "musiccursor.moveToPosition (position);"이라고 부를 필요가 있습니다. 처음에

+0

실제로 사용해야합니다 내가 그 두 operation.but, 처음에 listView first.i에서 항목을 제거 할 수있는 수정 arrayAdapter 함께 제거 할 수있다. ,하지만 지금은 파일을 getViw area.here에서 삭제 작업을 처리 할 수없는오고있다. – Rumit