Урок 67. Диалоги. ProgressDialog

Обсуждение уроков
maldalik
Сообщения: 3
Зарегистрирован: 04 апр 2016, 10:24

Re: Урок 67. Диалоги. ProgressDialog

Сообщение maldalik » 30 окт 2017, 05:53

Приведенный пример который в разных вариациях выдает гугл конечно прост и понятен. Непонятно другое, зачем такое надо? То есть, прокрутить индикатор независимо от задачи, смысла в общем то не имеет. А если я задаю handle, то теряю доступ ко всем своим переменным в методе. А как сделать что б прошла операция в моей задаче - сдвинулся индикатор.
попробовал без Handle, тупо не отображает прогрессбар. :(
Ниже пример моего метода..

Код: Выделить всё

    void getFileList(String dirPath) throws IOException
    {

        String tmpstring,AuthorName,AuthorLastName,BookTitle,Seria,strEncode;
        String strExt,strMessage;
        Integer fileCount,counter;
        BookList.clear();
        File f1 = new File(dirPath);
        TitlePath=dirPath;

        File[] list = f1.listFiles();
        if(list == null)
            list = new File[]{};
        fileCount=list.length;
        ProgressDialog pd = new ProgressDialog(this);
        pd.setTitle("Сканирование каталога");
        strMessage="Чтение тэгов из  "+fileCount.toString();
        pd.setMessage(strMessage);
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setMax(fileCount);
        counter=0;
        pd.setIndeterminate(true);
        pd.show();
        //Handler h = new Handler() {
//            public void handleMessage(Message msg) {
        List<File> fileList = Arrays.asList(list);
        Collections.sort(fileList, new Comparator<File>() {
            @Override
            public int compare(File file, File file2) {
                if (file.isDirectory() && file2.isFile())
                    return -1;
                else if (file.isFile() && file2.isDirectory())
                    return 1;
                else
                    return file.getPath().compareTo(file2.getPath());

            }
        });
            //Arrays.sort( filelist);

            CurPath=dirPath;
            FullPathText = (TextView) findViewById(FullPath);
            FullPathText.setText(CurPath);

                for (File file : fileList) {
                    if (file.isDirectory()) {
                        FileName = file.getName();
                        BookName = "Dir";
                        fileExt = 1;
                    } else {
                        FileName = file.getName();
                        BookName = "Моя книга";
                        strExt = FileName.substring(FileName.lastIndexOf("."));
                        switch (strExt) {
                            case ".fb2":
                                fileExt = 2;
                                strEncode = getFileEncode(file);
                                tmpstring = getFileHeader(file, 50, strEncode);//выбираем первые N строк
                                //tmpstring=getfb2Tag(tmpstring,"title-info");//обрезаем лишнее, что бы не зацепить серию от издаетля, типа Фантастический боевик и т.д.
                                BookTitle = getfb2Tag(tmpstring, "book-title");//берем название
                                AuthorLastName = getfb2Tag(tmpstring, "last-name");//берем имя автора
                                AuthorName = getfb2Tag(tmpstring, "first-name");//берем фамилию автора
                                Seria = getfb2Tag(tmpstring, "seria");
                                BookTitle = AuthorLastName + " " + AuthorName + "-" + BookTitle;
                                if (BookTitle.length() > 0) {
                                    FileName = BookTitle;
                                }
                                ;
                                if (Seria.length() > 0) {
                                    BookName = Seria;
                                } else {
                                    BookName = "";
                                }

                                break;
                            case ".zip":
                                fileExt = 3;
                                tmpstring = getZipTitle(file);
                                //tmpstring=getfb2Tag(tmpstring,"title-info");//обрезаем лишнее, что бы не зацепить серию от издаетля, типа Фантастический боевик и т.д.
                                BookTitle = getfb2Tag(tmpstring, "book-title");//берем название
                                AuthorLastName = getfb2Tag(tmpstring, "last-name");//берем имя автора
                                AuthorName = getfb2Tag(tmpstring, "first-name");//берем фамилию автора
                                Seria = getfb2Tag(tmpstring, "seria");
                                BookTitle = AuthorLastName + " " + AuthorName + "-" + BookTitle;
                                if (BookTitle.length() > 0) {
                                    FileName = BookTitle;
                                }
                                ;
                                if (Seria.length() > 0) {
                                    BookName = Seria;
                                } else {
                                    BookName = "";
                                }
                                break;
                            default:
                                fileExt = 4;
                                break;
                        }

                    }
                    Book tmpBook = new Book(FileName, BookName, fileExt);
                    BookList.add(tmpBook);
                    CurPath = file.getPath();
                    counter = counter + 1;
                    pd.setProgress(counter);
                    pd.incrementProgressBy(1);
        }
        pd.dismiss();
        lvMain.setAdapter(bookAdapter);
}

pabloid
Сообщения: 3
Зарегистрирован: 31 окт 2017, 17:46

Re: Урок 67. Диалоги. ProgressDialog

Сообщение pabloid » 07 ноя 2017, 13:49

Добрый день всем. У меня проблемы с примером из урока. На эмуляторе при нажатии на "горизонтальную" кнопку, по прошествии 2 секунд ничего не происходит. С чем это может быть связанно? Код точно как в уроке.

Код: Выделить всё

package ru.pabloidoid.p0671progressdialog;

import android.app.Dialog;
import android.app.Notification;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {
    ProgressDialog pd;
    Handler h;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onclick(View v) {
        switch (v.getId()) {
            case R.id.btnDefault:
                pd = new ProgressDialog(this);
                pd.setTitle("Title");
                pd.setMessage("Message");
                // добавляем кнопку
                pd.setButton(Dialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
                pd.show();
                break;
            case R.id.btnHoriz:
                pd = new ProgressDialog(this);
                pd.setTitle("Title");
                pd.setMessage("Message");
                // меняем стиль на индикатор
                pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                // устанавливаем максимум
                pd.setMax(2148);
                // включаем анимацию ожидания
                pd.setIndeterminate(true);
                pd.show();
                h = new Handler() {
                    public void handleMessage(Notification.MessagingStyle.Message msg) {
                        // выключаем анимацию ожидания
                        pd.setIndeterminate(false);
                        if (pd.getProgress() < pd.getMax()) {
                            // увеличиваем значения индикаторов
                            pd.incrementProgressBy(50);
                            pd.incrementSecondaryProgressBy(75);
                            h.sendEmptyMessageDelayed(0, 100);
                        } else {
                            pd.dismiss();
                        }
                    }
                };
                h.sendEmptyMessageDelayed(0, 2000);
                //h.handleMessage(new Message());

                break;
            default:
                break;
        }
    }

}
Была версия, что студия помечает функцию handleMessage как нигде не вызываемую (хотя судя по всему она должна вызываться при sendEmptyMessageDelayed), поэтому я попробовал вызвать явно, но это тоже ничего не дало.

Подскажите, как сделать так что бы прогресс бар заработал?

ElDog
Сообщения: 2
Зарегистрирован: 21 ноя 2017, 19:44

Re: Урок 67. Диалоги. ProgressDialog

Сообщение ElDog » 21 ноя 2017, 19:48

Подскажите как вызывать активити из диалогового окна. Например: окно с кнопками да и нет, да - вызов активити 2, нет - остаемся на активити 1.

Ответить