마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

listview scroll 버벅거려요...

0 추천
public class mmmusicAdapter extends BaseAdapter {
	private static ArrayList<String> mMusicIDList;
	public static ArrayList<String> mAlbumartIDList;
	public static ArrayList<String> mMusicTitleList;
	public ArrayList<String> mSingleList;

	private Context mContext;
	private ViewGroup rootView;
	private Cursor musicCursor;
	public static int mNumber = 0;
	public static int playOrStop = 0;

	mmmusicAdapter(Context magInstance, ViewGroup rootView) {
		// TODO Auto-generated constructor stub
		this.mContext = magInstance;
		mMusicIDList = new ArrayList<String>();
		mAlbumartIDList = new ArrayList<String>();
		mMusicTitleList = new ArrayList<String>();
		mSingleList = new ArrayList<String>();
		this.rootView = rootView;

		getMusicInfo();
	}

	private void getMusicInfo() {
		String[] proj = { MediaStore.Audio.Media._ID,
				MediaStore.Audio.Media.ALBUM_ID, MediaStore.Audio.Media.TITLE,
				MediaStore.Audio.Media.ARTIST };

		musicCursor = mContext.getContentResolver().query(
				MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, null, null,
				null);

		if (musicCursor != null && musicCursor.moveToFirst()) {
			String musicID;
			String albumID;
			String musicTitle;
			String singer;

			int musicIDCol = musicCursor
					.getColumnIndex(MediaStore.Audio.Media._ID);
			int albumIDCol = musicCursor
					.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
			int musicTitleCol = musicCursor
					.getColumnIndex(MediaStore.Audio.Media.TITLE);
			int singerCol = musicCursor
					.getColumnIndex(MediaStore.Audio.Media.ARTIST);
			System.out.println("musicIDCol" + musicIDCol + ",    "
					+ "albumIDCol:" + albumIDCol + ",    " + "musicTitleCol:"
					+ musicTitleCol + ",    " + "singerCol:" + singerCol);
			do {
				musicID = musicCursor.getString(musicIDCol);
				albumID = musicCursor.getString(albumIDCol);
				musicTitle = musicCursor.getString(musicTitleCol);
				singer = musicCursor.getString(singerCol);
				mMusicIDList.add(musicID);
				mAlbumartIDList.add(albumID);
				mMusicTitleList.add(musicTitle);
				mSingleList.add(singer);
			} while (musicCursor.moveToNext());
		}
		musicCursor.close();
		return;

	}

	public int getMusicID(int position) {
		return Integer.parseInt((mMusicIDList.get(position)));
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return mMusicIDList.size();
		// mMusicIDList.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		View listViewItem = convertView;
		final mmViewHolder mmViewHolder;

		if (listViewItem == null) {
			listViewItem = LayoutInflater.from(mContext).inflate(
					R.layout.music_item3, parent, false);

			mmViewHolder = new mmViewHolder();

			mmViewHolder.musicTitle = (TextView) listViewItem
					.findViewById(R.id.musicTitle_item);
			mmViewHolder.singerName = (TextView) listViewItem
					.findViewById(R.id.musicArtist_item);
			mmViewHolder.playButton = (RelativeLayout) listViewItem
					.findViewById(R.id.oooooooo);

			listViewItem.setTag(mmViewHolder);
			MusicAdapter.mNumber = position;

		} else {
			mmViewHolder = (mmViewHolder) listViewItem.getTag();
			MusicAdapter.mNumber = position;

		}
		// 처음 상위 이미지 및 Text 읽어오기
		Bitmap mainalbumPost = PageFragment.getArtworkQuick(mContext,
				Integer.parseInt((mAlbumartIDList.get(MusicAdapter.playList))),
				120, 120);
		MusicListActivity.title.setText(mMusicTitleList
				.get(MusicAdapter.playList));
		MusicListActivity.singer
				.setText(mSingleList.get(MusicAdapter.playList));
		MusicListActivity.poster.setImageBitmap(mainalbumPost);

		mmViewHolder.musicTitle.setText(mMusicTitleList.get(position));
		mmViewHolder.singerName.setText(mSingleList.get(position));

		// 음악 플레이
		mmViewHolder.playButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				// 정지중일때
				MagActivity.timecount = 0;
				if (MusicAdapter.isPlay == false) {
					mNumber = position;
					playOrStop = 0;
					PageFragment.setPosition(mNumber, 0);
					MusicAdapter.playOrStop = 0;
					MusicAdapter.isPlay = true;
					MusicAdapter.playList = position;
				} else if (MusicAdapter.isPlay == true) { // 재생중일때
					playOrStop = 1;
					MusicAdapter.playOrStop = 1;
					mNumber = position;
					PageFragment.setPosition(mNumber, 1);
					Log.i(null, "-------play0000---------");
					MusicAdapter.isPlay = false;
					MusicAdapter.playList = position;
				}
				// 클릭 후에 상위 이미지 및 Text 변경
				Bitmap mainalbumPost = PageFragment.getArtworkQuick(mContext,
						Integer.parseInt((mAlbumartIDList
								.get(MusicAdapter.playList))), 110, 110);
				MusicListActivity.title.setText(mMusicTitleList
						.get(MusicAdapter.playList));
				MusicListActivity.singer.setText(mSingleList
						.get(MusicAdapter.playList));
				MusicListActivity.poster.setImageBitmap(mainalbumPost);

			}
		});
		return listViewItem;
	}

	private static class mmViewHolder {
		private RelativeLayout playButton;
		private TextView musicTitle;
		private TextView singerName;

	}
}

listView양이 적으면 괜찮은데 Music이라서 너무 버벅거리는데 해결방안좀 부탁드립니다.

 

강력한 (520 포인트) 님이 2014년 3월 24일 질문

1개의 답변

+2 추천
 
채택된 답변
이미지 비트맵 셋팅하는부분 빼고 해보세요 그렇게했을경우 버벅거리지않으면 이미지를 비트맵으로 만들때 걸리는

작업때문에 UI 스레드가 렉이걸리는것입니다
건방진프로그래머 (26,630 포인트) 님이 2014년 3월 24일 답변
강력한님이 2014년 3월 24일 채택됨
갑사합니다 ㅋ 비트맵때문에 그렇네요.
...