Показать ProgressDialog onActivityResult

У меня есть два действия: первое - загрузка URL (простое веб-представление), а второе - получение идентификатора URL-адреса из списка, а затем обратный вызов первого действия для загрузки URL-адреса. Я использую onActivityResult() метод в первом упражнении для получения дополнительных данных (url id). Моя проблема, когда я хочу показать ProgressDialog в первом действии в методе onActivityResult() после выбора элемента из ListView во втором упражнении я получил ProgressDialog, но он просто показывает в течение нескольких секунд (очень быстро), а затем исчезает, прежде чем завершить загрузку для URL (WebView)

Это код для буксировки, я надеюсь, поможет мне.

public class LibActivity extends Activity {

private ImageButton btnCategoriesList;

public static final int BOOK_CATEGORY_REQUEST_CODE = 1;

private WebView webView;

public ProgressDialog dialog;
private Handler handler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.lib);

    handler = new Handler();
    dialog = ProgressDialog.show(this, "Loading", "Please wait", true, false);

    DisplayMetrics displaymetrics = new DisplayMetrics();

    webView = (WebView) findViewById(R.id.categoryWebView);
    webView.setWebViewClient(new CategoryItemWebViewClient());
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("http://maktabati.mobi/V3/store.php?catid=" + "91");

    btnCategoriesList = (ImageButton) findViewById(R.id.btn_category_list);

    btnCategoriesList.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showBooksCategories();
        }
    });
}

/**
 * 
 */
protected void showBooksCategories() {
    Intent intent = new Intent(getApplicationContext(), BooksCategoriesActivity.class);
    startActivityForResult(intent, BOOK_CATEGORY_REQUEST_CODE);
}

/**
 * 
 * @author Jamil
 * 
 */
private class CategoryItemWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.contains("book")) {
            String bookId = url.substring(12);
            Intent intent = new Intent(getApplicationContext(), BookDetailActivity.class);
            intent.putExtra("BOOK_ID", bookId);
            startActivity(intent);
            view.stopLoading();
        }
        return super.shouldOverrideUrlLoading(view, url);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        dialog.dismiss();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
    if (requestCode == BOOK_CATEGORY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            dialog = ProgressDialog.show(this, "Loading", "Please wait", true);
            new Thread() {
                public void run() {
                    webView.loadUrl("http://maktabati.mobi/V3/store.php?catid=" + data.getStringExtra("CATEGORY_ID"));
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            dialog.dismiss();
                        }
                    });
                }
            }.start();

        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

второе занятие

public class BooksCategoriesActivity extends Activity {

ItemsCategoriesAdapter adapter;
ArrayList<Category> lstCategory;
Handler handlerProgressDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.books_categories_list);
    handlerProgressDialog = new Handler();
    CategoryHandler handler = new CategoryHandler();
    ParserCreater parserCreater = new ParserCreater(handler);
    parserCreater.parse("http://maktabati.mobi/V3/getCategories.php");
    lstCategory = handler.getLstCategory();
    final ListView listView = (ListView) findViewById(R.id.categories_list);
    adapter = new ItemsCategoriesAdapter(lstCategory);
    listView.setAdapter(adapter);
    listView.setTextFilterEnabled(true);

    listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, final int position, long arg3) {
            Intent intent = new Intent(getApplicationContext(), LibActivity.class);
            intent.putExtra("CATEGORY_ID", lstCategory.get(position).getId());
            BooksCategoriesActivity.this.setResult(RESULT_OK, intent);
            finish();
        }
    });
}

Спасибо

2 ответа

Попробуйте, что произойдет, если вы удалите следующий код из функции onActivityResult:

handler.post(new Runnable() {
                        @Override
                        public void run() {
                            dialog.dismiss();
                        }
                    });

onPageFinished() функция должна вызываться после webView.loadUrl(),

Метод loadUrl() не является блокирующим вызовом, поэтому вам не нужно вызывать его из фонового потока. Если вы хотите зафиксировать точку завершения загрузки страницы, вы можете установить WebviewClient объект на вашем WebView обрабатывать серию обратных вызовов в этом отношении.

Кроме того, поскольку этот вызов не блокируется, он немедленно возвращается, и ваш dismiss() метод вызывается почти сразу show()Вот почему вы видите это отображение только на короткое время.

НТН

Другие вопросы по тегам