0
AsyncTask에서 실행되는 동안 ViewGroup의 특정 요소의 속성을 업데이트하는 가장 좋은 방법은 무엇입니까? 예 : 목록보기의 TextView 항목에서 파일의 다운로드 진행률을 업데이트합니다. 내 코드에는 가장 관련성이 높은 부분 만 남았습니다. FetchDataParams 클래스는 기본적인 청사진만을 제공하며이 문제는 아무 것도 흥미롭지 않습니다.AsyncTask BaseAdapter (ListAdapter)의 ViewGroup 속성을 변경하십시오.
ViewHolder 클래스 :
static class ViewHolder {
ProgressBar progressBar;
TextView progress;
TextView size;
ToggleButton toggleBtn;
int position;
}
BaseAdapter/ListAdapter 클래스 :
public class RouteItemAdapter extends BaseAdapter implements ListAdapter {
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.routeitem, null);
}
routeItem = (TextView)view.findViewById(R.id.routeItem);
routeItem.setText(list.get(position).nameShort);
toggleBtn = (ToggleButton)view.findViewById(R.id.toggleButton);
ViewHolder holder = new ViewHolder();
holder.progressBar = (ProgressBar)view.findViewById(R.id.progressBar);
holder.progress = (TextView)view.findViewById(R.id.progress);
holder.size = (TextView)view.findViewById(R.id.size);
holder.toggleBtn = toggleBtn;
view.setTag(R.id.routeItem, holder);
toggleBtn.setTag(R.id.toggleButton, this.getItem(position));
toggleBtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//Download offline route data in AsyncTask
if (isChecked) {
RouteItem rItem = (RouteItem)buttonView.getTag(R.id.toggleButton);
String routeSelected = rItem.name;
FetchData FetchData = new FetchData();
FetchData.execute(routeSelected);
} else {
}
}
});
return view;
}
public void setFileSize(long fileSize) {
String sizeOfFile = readableFileSize(fileSize);
size.setText("Size: " + sizeOfFile);
}
public void setProgressBar(int a) {
progressBar.setProgress(a);
}
public void setTextProgress(String a) {
progress.setText(a);
}
가 여기에 문제가 온다. AsyncTask를 통해 setFileSize, setProgressBar 및 SetTextProgress를 호출하려면 어떻게해야합니까?
AsyncTask를 코드
private class FetchData extends AsyncTask<String, FetchDataParams, String> {
@Override
protected String doInBackground(String... routeSelected) {
//code removed here...
int progress = (int)((i/(float)totalpoints) * 100);
String progressString = progress + "/100%";
publishProgress(new FetchDataParams(outputFile.length(), progress, progressString));
//code removed here...
return filePath;
}
//This is what I figured it should be doing, this does not work inside a listAdapter
protected void onProgressUpdate(FetchDataParams... params) {
setFileSize(params[0].fileLength);
setProgressBar(params[0].progress);
setTextProgress(params[0].progressString);
}
@Override
protected void onPostExecute(String routeSelected) {
super.onPostExecute(routeSelected);
}
}
감사 @NehaK이 매력 – Fullhdpixel
환영 @Fullhdpixel처럼 작동 – NehaK