フラグメントがあり、フラグメントにリストビューを設定しています。
コードは次のとおりです。
public class AttachmentsFragment extends Fragment {
ListView lstView = null;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//retains fragment instance across Activity re-creation
setRetainInstance(true);
objects = new ArrayList<AttachModel>();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = null;
view = inflater.inflate(R.layout.tab_attachment, container, false);
lstView = (ListView) view.findViewById(R.id.listViewAttachment);
adapter = new AttachAdapter(getActivity(), 0, 0, objects);
lstView.setAdapter(adapter);
return view;
}
}
アダプターには、進行状況バーと進行状況バーの進行状況を表示するテキストビューがあります。プログレスバーを開始および停止するボタン
public class AttachAdapter extends ArrayAdapter<AttachModel> implements OnClickListener {
Context context;
ArrayList<AttachModel> objects = new ArrayList<AttachModel>();
AttachModel info;
//Activity act;
AttachModel model;
public AttachmentsAdapter(Context context, int resource,
int textViewResourceId, ArrayList<AttachmentsModel> objects) {
super(context, textViewResourceId, textViewResourceId, objects);
this.context = context;
this.objects = objects;
}
// no. of attachments available
@Override
public int getCount() {
return objects.size();
}
@Override
public AttachmentsModel getItem(int position) {
return objects.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if(null == row) {
LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.attachment_list_item, parent, false);
//textview for showing progress
holder.textViewProgress = (TextView) row.findViewById(R.id.txtViewPg);
//progress bar to show the progress
holder.progressBar = (ProgressBar) row.findViewById(R.id.pgBar);
holder.progressBar.setTag(position);
holder.textViewProgress.setVisibility(TextView.VISIBLE);
holder.img_view_fileIcon.setVisibility(ImageView.VISIBLE);
holder.progressBar.setVisibility(ProgressBar.VISIBLE);
//to start stop the progress bar
holder.button = (Button)row.findViewById(R.id.img_btn_download);
holder.button.setVisibility(Button.VISIBLE);
holder.button.setTag(position);
holder.button.setOnClickListener(this);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
return row;
}
private class ViewHolder {
TextView textViewProgress;
ProgressBar progressBar;
Button button;
boolean downloadFlag = false;
}
@Override
public void onClick(View v) {
View vParent=(View) v.getParent();
ViewHolder tempHolder = null;
tempHolder=(ViewHolder) vParent.getTag();
//toggle button like functionality
if(!tempHolder.downloadFlag) {
tempHolder.downloadFlag = true;
tempHolder.progressBarStatus = 0;
async = new AsyncTaskAttachments(tempHolder, objects.get(Integer.parseInt(v.getTag().toString())).getFilePath());
tempHolder.async.execute();
objects.get((Integer)tempHolder.progressBar.getTag()).setAsyncTask(tempHolder.async);
}else {
tempHolder.downloadFlag = false;
tempHolder.progressBar.setProgress(0);
tempHolder.textViewProgress.setVisibility(TextView.GONE);
tempHolder.textViewProgress.setText("");
tempHolder.progressBarStatus = 0;
tempHolder.async.cancel(true);
}
}
public class AsyncTaskAttachments extends AsyncTask<Void, Void, Void> {
private ViewHolder holder;
public AsyncTaskAttachments(ViewHolder holder, String filePath) {
this.holder = holder;
this.filePath = filePath;
}
public void attach(Activity act) {
this.act = act;
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
holder.progressBarStatus = 0;
for(int i=0; i<=10; i++) {
try {
Thread.sleep(1000);
holder.progressBarStatus = i*10;
if(isCancelled()) {
break;
}
publishProgress();
}catch (Exception e) {
// TODO: handle exception
}
}
return null;
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
holder.progressBarStatus = 0;
holder.textViewProgress.setText("" + holder.progressBarStatus + "%");
holder.progressBar.setProgress(holder.progressBarStatus);
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onProgressUpdate(Progress[])
*/
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
// TODO Auto-generated method stub
holder.progressBar.setProgress(holder.progressBarStatus);
holder.textViewProgress.setText("" + holder.progressBarStatus + "%");
}
}
}
注:これは、私が行っている方法を示すためのものです。これはほんの一例です。自分が正しい軌道に乗っているかどうかを知る必要があります。
向きの変更時に、進行状況バーが保持できず、向きが変わった場所から進行状況を開始できません。
前もって感謝します