Java 从一个活动切换到另一个活动时创建进度对话框
我有一个自定义对话框片段。我想在切换活动时显示此对话框 情景:- 1实际上,我启动了对话框。 2启动一个异步任务类。 3在doInBackground中进行一些身份验证。 4从onPostExecute启动新活动 问题:- 对话框在异步任务之前停止 这是我的密码:-Java 从一个活动切换到另一个活动时创建进度对话框,java,android,android-asynctask,progressdialog,Java,Android,Android Asynctask,Progressdialog,我有一个自定义对话框片段。我想在切换活动时显示此对话框 情景:- 1实际上,我启动了对话框。 2启动一个异步任务类。 3在doInBackground中进行一些身份验证。 4从onPostExecute启动新活动 问题:- 对话框在异步任务之前停止 这是我的密码:- myWebView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(W
myWebView.setWebViewClient(new WebViewClient()
{
@Override
public void onPageStarted(WebView view, String url,
Bitmap favicon)
{
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
redirected =view.getUrl();
redirected= Uri.decode(redirected);
if(redirected!=null && redirected.contains(string1))
{
myprogressDialog.show(getFragmentManager(), "Wait");
}
}
@Override
public void onPageFinished(WebView view, String url)
{
// TODO Auto-generated method stub
super.onPageFinished(view, url);
if(redirected!=null && redirected.contains(mystring) )
{
myWebView.stopLoading();
String authorizationContentString = myurl
new Authentication(Activity2.this, myprogressDialog, url).execute(authorizationString);
}
private static class ProgressDialogFragment extends DialogFragment
{
public static ProgressDialogFragment newInstance()
{
return new ProgressDialogFragment();
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, android.R.style.Theme_Translucent);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.fragment_dialog_progress, container, false);
}
}
Authentication.java
@Override
protected void onPreExecute()
{
// TODO Auto-generated method stub
super.onPreExecute();
/* progDia.show(man, "wait");
progDia= new Utility.ProgressDialogFragment().newInstance();*/
}
public AuthenticateDevice(Details1 myContext, ProgressDialogFragment myprogressDialog, String Url)
{
// TODO Auto-generated constructor stub
mContext = myContext;
this.progDia = myprogressDialog;
this.Url = Url;
this.mActivity = myContext;
}
@Override
protected Void doInBackground(String... params)
{
// TODO Auto-generated method stub
//Some authentication
return null;
}
@Override
protected void onPostExecute(Void result)
{
// TODO Auto-generated method stub
super.onPostExecute(result);
if(progDia!=null&&progDia.isVisible())
{
progDia.dismiss();
}
Intent myIntent = new Intent(mContext, Activity2.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mContext.startActivity(myIntent);
mActivity.finish();
}
尝试以下代码以异步方式显示进度对话框
ProgressDialog pd;
class MYAsync extends AsyncTask<Void , Void, String>{
@Override
protected void onPreExecute() {
// pd.setTitle("Please Wait");
pd.setMessage("Working...");
pd.setCancelable(false);
pd.setIndeterminate(true);
pd.show();
}
@Override
protected String doInBackground(Void... params) {
// TODO Auto-generated method stub
return null;
}
@Override
protected void onPostExecute(String sResponse) {
pd.dismiss();
pd.cancel();
}
}
}
我试着重新创建它,它似乎工作得很好。下面的方法有一些注释,解释您的操作
private void myWOrk() {
try {
final ProgressDialog Dialog = new ProgressDialog(this);
Dialog.setMessage("Loading route...");
Dialog.show();
Thread.sleep(2000);// load url and redirect
//Toast.makeText(LoginActivity.this, "redirect caught", Toast.LENGTH_SHORT).show();
new AsyncTask<Object, Object, Object>() {
protected String doInBackground(Object... params) {
try {
Thread.sleep(2000);// authenticate
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Object result) {
Toast.makeText(LoginActivity.this, "onPostExecute", Toast.LENGTH_SHORT).show();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Dialog.dismiss();// start your new activity here
};
}.execute(null, null, null);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}`
为什么不在onPreExecute中创建进度对话框,并在onPostExecute中取消它呢?上面的评论很有意义!或者在onPageStarted之前尝试调用progressBar.show,这应该能很好地工作。@stack\ved我想在url重定向到某个url时实际显示progressBar对话框。这个很好用。但是当新的活动开始时,你应该希望在url laods+重定向+身份验证时显示进度条。所有这些都应该发生在进度条的前面?甚至在调用此行new AuthenticationActivity2.this、myprogressDialog、url.executeauthorizationString之前,对话框是否已被取消@是的,这正是我想做的。我想在异步任务之前启动progressdialog。例如,在我调用asynctask并在新活动开始后结束它之前,您是否希望在新活动开始后执行其他操作Dialog您可以在第二个活动开始后执行,这是可能的,但这将是肮脏的,因为您必须将当前活动的引用传递给ProgressDialogFragment,以便它在所有时间点都有一个有效的父级。@stack\ved Iam正在Web视图中加载登录页。当用户登录时,他被重定向到一个页面,在那里他被验证。此页面显示您已通过身份验证的消息。然后,下一个活动开始。我在登录后捕获第一个重定向的url,在下一个活动开始之前显示一个对话框,这样用户就不会看到You is authenticated页面,而是在下一个活动之前一直看到该对话框