Первая проблема заключалась в том, что ProgressDialog не отображался. Затем я прочитал, что я должен создать Thread. Я создал тему, и она сработала. Но теперь я не могу закрыть ProgressDialog. Приложение вылетает, экран становится черным.
xGrava.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final ProgressDialog PD = ProgressDialog.show(NovaOcc.this,"","");
PD.setContentView(R.layout.ipp_load);
PD.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Thread mThread = new Thread() {
@Override
public void run() {
if (ValidaDados() == true) {
if (GravaDados() == true) {
xGrava.setVisibility(View.GONE);
PD.dismiss();
}
}
}
};
mThread.start();
}
});
Насколько я понимаю, это для Android. Как правило, мы используем потоки, когда нужно запустить длительный процесс, и мы не хотим, чтобы пользовательский интерфейс представления зависал, потому что это запущенный поток пользовательского интерфейса.
Итак, чтобы ответить на вопрос, убедитесь, что при вызове любого действия в представлении оно выполняется на «runOnUIThread».
Например, здесь, как только ваш поток завершит «длинную» задачу, вы можете сделать:
xGrava.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final ProgressDialog PD = ProgressDialog.show(NovaOcc.this,"","");
PD.setContentView(R.layout.ipp_load);
PD.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Thread mThread = new Thread() {
@Override
public void run() {
if (ValidaDados() == true) {
if (GravaDados() == true) {
runOnUiThread(new Runnable() {
@Override
public void run() {
xGrava.setVisibility(View.GONE);
PD.dismiss();
}
}
);
}
}
}
};
mThread.start();
}
});