我在简单的登录应用程序中使用进度条。但是进度条没有显示。有时我改变进度条的位置是在调用progressbar.show()之前显示的。 这是我的XML代码
<ProgressBar
android:id="@+id/progressBar"
android:indeterminateDrawable="@drawable/progress"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="invisible"
>
</ProgressBar>
在onCreate()方法中:
progressBar= (ProgressBar) findViewById(R.id.progressBar);
progressBar.setVisibility(View.GONE);
按钮oncliklistener
btn_login.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
uid=usrusr.getText().toString().trim();
upass=pswd.getText().toString().trim();
try {
progressBar.setVisibility(View.VISIBLE);
checkLogin(uid,upass);
progressBar.setVisibility(View.GONE);
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}
我已尝试过stackoverflow的许多其他解决方案,但它们都没有奏效 谢谢:/
答案 0 :(得分:1)
请尝试以下代码。
private ProgressDialog progDailog;
private Button btn_login;
private EditText uid, upass;
private String uid1, upass1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progDailog = new ProgressDialog(this);
progDailog.setTitle("Login");
progDailog.setMessage("Please wait...");
progDailog.setCancelable(false);
btn_login = findViewById(R.id.btn_login);
uid = findViewById(R.id.uid);
upass = findViewById(R.id.upass);
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
uid1 = uid.getText().toString().trim();
upass1 = upass.getText().toString().trim();
progDailog.show();
checkLogin(uid1, upass1);
Runnable progressRunnable = new Runnable() {
@Override
public void run() {
progDailog.dismiss();
}
};
Handler pdCanceller = new Handler();
pdCanceller.postDelayed(progressRunnable, 3000);
}
});
}
这里3000是毫秒,这意味着3秒,您可以根据您的要求进行更改。
您的XML就像。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/uid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="uid" />
<EditText
android:id="@+id/upass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="upass" />
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btn_login" />
</LinearLayout>
请尝试此操作,如果您需要进行任何其他更改,请与我们联系。
答案 1 :(得分:0)
在调用api之前尝试添加代码以显示progressBar
,并关闭请求progressBar
上的response
。
实施例。
void checkLogin(String name, String psd){
progressBar.setVisibility(View.VISIBLE);
//start the api call
}
void onApiCallresponse(){
runOnUiThread(new Runnable() {
@Override
public void run() {
progressBar.setVisibility(View.VISIBLE);
//code for what you want to do after login
}
});
}
答案 2 :(得分:0)
您是否考虑过您的数据处理&#34;代码在UI线程上运行,阻止任何可见的更改。我建议尝试放
runOnUiThread(new Runnable() {
@Override
public void run() {
progressBar.setVisibility(View.VISIBLE);
}
});
如果您的progressBar仍未显示且没有任何帮助
答案 3 :(得分:0)
您可以像这样显示3秒的进度:
progressBar.setVisibility(View.VISIBLE);
progressBar.postDelayed(new Runnable() {
@Override
public void run() {
progressBar.setVisibility(View.GONE);
}
}, 3000) ;
checkLogin(uid,upass);
但是,当您开始检查登录并调用api并在收到结果时隐藏它时,最好显示您的进度。