Tôi có kịch bản, Trong ứng dụng trò chuyện của tôi, tôi muốn gửi ảnh, ảnh gửi cần có thời gian. Tôi đã đính kèm một thanh tiến trình (ngang) để hiển thị tiến trình gửi ảnh trong ứng dụng của tôi. Nhưng tôi không thể cập nhật thanh tiến trình vì nó là mục của chế độ xem danh sách tùy chỉnh.Cập nhật Thanh tiến trình trong chế độ xem danh sách
Đây là asynchtask của tôi để đặt tiến độ cho Thanh tiến trình nhưng tôi không thể nhận được.
class SendPhotoToFriend extends AsyncTask<String, String, String>{
String receiver,path = "";
public SendPhotoToFriend(String path,String receiver) {
// TODO Auto-generated constructor stub
this.path = path;
this.receiver = receiver;
}
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
ServiceDiscoveryManager sdm = ServiceDiscoveryManager
.getInstanceFor(connection);
if (sdm == null)
sdm = new ServiceDiscoveryManager(connection);
sdm.addFeature("http://jabber.org/protocol/disco#info");
sdm.addFeature("jabber:iq:privacy");
// Create the file transfer manager
FileTransferManager manager = new FileTransferManager(
connection);
FileTransferNegotiator.setServiceEnabled(connection, true);
// Create the outgoing file transfer
OutgoingFileTransfer transfer = manager
.createOutgoingFileTransfer(receiver + "/Smack");
System.out.println("Receiver of the file is "+receiver+"/smack");
Log.i("transfere file", "outgoingfiletransfer is created");
try {
long total = 0;
OutgoingFileTransfer.setResponseTimeout(30000);
transfer.sendFile(new File(path), "Description");
Log.i("transfere file", "sending file");
while (!transfer.isDone()) {
//Thread.sleep(1000);
total+=transfer.getProgress();
publishProgress(""+(int)((total*100)/transfer.getFileSize()));
Log.i("transfere file", "sending file status "
+ transfer.getStatus() + "progress: "
+ transfer.getProgress());
if (transfer.getStatus() == org.jivesoftware.smackx.filetransfer.FileTransfer.Status.error) {
Log.i("transfere file", "Errorrr isss: "
+ transfer.getError()+transfer.getPeer());
transfer.cancel();
break;
}
}
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("transfere file", "sending file done");
return null;
}
@Override
protected void onProgressUpdate(final String... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
LayoutInflater inflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View view =inflater.inflate(R.layout.user_chat_send_chat, null);
ProgressBar p_Bar = (ProgressBar)view.findViewById(R.id.progress_bar_image);
p_Bar.setProgress(Integer.parseInt(values[0]));
customAdapter1.notifyDataSetChanged();
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}
Thanh tiến trình là chế độ xem của chế độ xem danh sách tùy chỉnh, tôi muốn cập nhật nó tại thời gian chạy.
Cảm ơn
Tôi có nên gọi nó từ phương thức getView không? –
Quyết định này phụ thuộc rất nhiều vào kiến trúc phần mềm của ứng dụng của bạn. Không có sai hay đúng. Nó giống như nơi mà nó có ý nghĩa hơn để gọi AsyncTask của bạn .. Tôi sợ tôi không thể trả lời câu hỏi này cho bạn. – Taig
Ok cảm ơn. Tôi sẽ kiểm tra nó và sẽ trở lại với bạn –