Android Progressbar запускается не в то время - PullRequest
2 голосов
/ 09 февраля 2012

Я пытаюсь запустить индикатор прогресса в моем приложении, но когда я запускаю его, BAr не отображается до запуска функции

public void onClick(View v) {

if (v == button)
{
    ProgressDialog dialog = ProgressDialog.show(App.this, "", 
            "Loading. Please wait...", true);
    dialog.show();
try
{

    directory = edittext.getText().toString();
    FileWriter fstream = new FileWriter("/data/data/folder.hide.alexander.fuchs/folder.db");
    BufferedWriter out = new BufferedWriter(fstream);
    out.write(directory);
    //Close the output stream
    out.close();
if(hide_or_show == "hide")
{



    edittext.setVisibility(View.INVISIBLE);
    folder_to_hide.setVisibility(View.INVISIBLE);
    hide();

    dialog.dismiss();
}
else
{   


    show();
    edittext.setVisibility(View.VISIBLE);
    folder_to_hide.setVisibility(View.VISIBLE);

    dialog.dismiss();
}
}
catch(Exception x)
{       
    String ErrorMessage = x.getMessage();
    Toast.makeText(this,"Error"+ErrorMessage, Toast.LENGTH_LONG).show();
    finish();
}
}
if (v == options)
{
    final CharSequence[] items = {"Change password", "http://www.alexander-fuchs.net/", "Market"};

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Options");
    builder.setItems(items, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {

            if (items[item] == "Change password")
            {
                createpass();

            }
            if (items[item] == "http://www.alexander-fuchs.net/")
            {
            intentstarter(items[item].toString());
           toaster(items[item].toString());
            }
            if (items[item] == "Market")
            {
            intentstarter("market://search?q=pub:Alexander Fuchs");
            toaster("Please wait...");
            }
        }
    });
    AlertDialog alert = builder.create();
    alert.show();
}
}

когда я нажимаю кнопку, требуется много времени для ответа, а затем вся функция завершается без запроса индикатора выполнения

1 Ответ

1 голос
/ 09 февраля 2012

onClick - это обратный вызов, при котором возврат в Android возвращается только после завершения обратного вызова. Все взаимодействие с пользовательским интерфейсом, которое вы в основном выполняете, собирается и ставится в очередь, пока обратный вызов активен и выполняется после возврата (может быть технически не совсем точным).

Чтобы ProgressBar отображался в начале действия и исчезал в конце, вы можете реализовать AsyncTask, где индикатор выполнения отображается в onPreExecute, реальные вычисления выполняются в doInBackground и прогрессбар отклоняется в onPostExecute. Например:

 protected void onPreExecute() {
        dialog = new ProgressDialog(context);
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.show();
 }

 protected void onPostExecute(Map<Integer, String> integerStringMap) {
        if (dialog!=null)
            dialog.cancel();
 }

 protected void onProgressUpdate(Integer... values) {
        int val = values[0]*10000/num;
        dialog.setProgress(val);
 }

Смотрите здесь для более полного примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...