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

커스텀뷰 내부의 프로그레스바는 setProgress를 어떻게할까요?

0 추천

커스텀뷰 내부에 

택스트뷰4개 프로그레스뷰 1개가 있습니다.

어떤 처리과정을 프로그레스뷰를 통해 사용자에게 보여야하는데,

커스텀뷰 내부 프로그레스뷰에 접근하는 방법을 모르겠습니다.

 

public class FileAdapter extends BaseAdapter {
	Context context;
	int layoutId;
	ArrayList<FileItem> myFileList;
	LayoutInflater inflater;
	
	FileAdapter(Context _context, int _layoutId, ArrayList<FileItem> _myFileArr){
		context = _context;
		layoutId = _layoutId;
		myFileList = _myFileArr;
		inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
	}
	
	
	public void setProgtext(int pos, String text){
		myFileList.get(pos).progtext = text;
	}
	public void setProgvalue(int pos, int val){
		myFileList.get(pos).progressvalue = val;
		
	}
	
	@Override
	public int getCount() {
		return myFileList.size();
	}
	@Override
	public Object getItem(int pos) {
		return myFileList.get(pos);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		if(convertView == null){
			convertView = inflater.inflate(layoutId,parent,false);
		}

		//file name
		TextView nameview = (TextView) convertView.findViewById(R.id.id_title);
		nameview.setText(myFileList.get(position).name);
		
		//file size
		TextView userIdView = (TextView) convertView.findViewById(R.id.id_size);
		Double dbsize;
		int size =myFileList.get(position).size;
		String u = null;
		if(size/1024/1024/1024.0 > 1){
			dbsize = size/1024/1024/1024.0;
			u = " GB";
		}
		else if(size/1024/1024.0 > 1){
			dbsize = size/1024.0/1024.0;
			u = " MB";
		}
		else{
			dbsize = size/1024.0;
			u = " KB";
		}
		String strsize = String.format("%.2f", dbsize);		
		userIdView.setText(strsize + u);
		
		//file date
		TextView timeView = (TextView) convertView.findViewById(R.id.id_date);
		timeView.setText(myFileList.get(position).date);

		// prog text
		TextView progview = (TextView) convertView.findViewById(R.id.id_progtext);
		progview.setText(myFileList.get(position).progtext);
		
		////prog
		ProgressBar progbar = (ProgressBar) convertView.findViewById(R.id.id_progbar);
		progbar.setProgress(myFileList.get(position).progressvalue);
		return convertView;
	}

}

 

익명사용자 님이 2014년 9월 11일 질문

3개의 답변

0 추천
 
채택된 답변
FileAdapter 인걸로 봐서...왠지.. 파일을 다우로드하거나 업로드?! 하는걸..

리스트뷰 형태로 표시하려는것 같아요.

맞는지는 모르겠지만.

 

FileItem 객채에 진행 상태를 표시하는 progressvalue 라는 변수가 있는데요.

파일을 업로드 혹은 다운로드!? 할때 값이 변한다고 예상이 되는데...

아마도 해당 Activity에 FileAdapter를 맴버변수로 가지고 있을 텐데요...

progressvalue 이 변수가 바뀔때  fileAdapter.notifyDataSetChanged();

해주시면 될것 같네요.

notifyDataSetChanged()에 대한 설명은 구글에 많아요~

그리고 리스트뷰를 위아래로 할 때 값이 이상해지면.. 위에 말씀해주신 holder 를 사용하서 하시면 끝!!?
Yong-Yong (3,500 포인트) 님이 2014년 9월 11일 답변
0 추천
setProgValue() 메소드가 선언되어 있는것 같은데 저걸로 접근하시면 되는것 아닌가요?;;
Gradler (109,780 포인트) 님이 2014년 9월 11일 답변
0 추천
일단 holder를 쓰시는게 좋으실거 같구요.

adapter에 holder 예제는 구글링 하시면 바로 나옵니다.

 

그리고 어떤 처리를 하시는지 모르겠는데...

 

특정 액션을 취하셨을때 프로그래스바가 증가(?)하는 것으로 추정되니...

 

굳이 메서드를 따로 안빼시겠다면 getview()안에서 처리하셔야 됩니다.
냐옹이류 (1,110 포인트) 님이 2014년 9월 11일 답변
...