Печать HTML-документа из фрагмента в Android Studio - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь создать приложение для Android, которое добавляет данные в HTML-документ на одном фрагменте и распечатывает этот документ одним нажатием кнопки на другом фрагменте. Я пытаюсь использовать эту страницу в документации Android в качестве руководства, но кнопка ничего не делает при нажатии. Я ничего не видел в logcat при тестировании на эмуляторе, но при тестировании на реальном устройстве я вижу следующую ошибку:

E/DatabaseIndexingManager: Cannot find SearchIndexableResources for class name: com.android.settings.print.PrintSettingsFragment

ОБНОВЛЕНИЕ: Даже если у меня нетПока что ничего не изменилось, приложение вылетает, как только фрагмент выбран. Теперь logcat выдает следующую ошибку:

E/ActivityManager: ANR in com.google.android.ims PID: 3635 Reason: Broadcast of Intent { act=android.telephony.action.CARRIER_CONFIG_CHANGED flg=0x15000010 cmp=com.google.android.ims/.receivers.CarrierConfigChangedReceiver (has extras) }

Затем он переходит к статистике использования ЦП.

Код для фрагмента:

public class CalendarFragment extends Fragment {
    private WebView mWebView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Button button = container.findViewById(R.id.button);

        //declaring OnClickListener as an object
        View.OnClickListener btnClick = (View v) ->  doWebViewPrint();

        button.setOnClickListener(btnClick);

        return inflater.inflate(R.layout.placeholder2, container, false);
    }

    private void doWebViewPrint() {
        // Create a WebView object specifically for printing
        WebView webView = new WebView(getActivity());
        webView.setWebViewClient(new WebViewClient() {

            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                Log.i(TAG, "page finished loading " + url);
                createWebPrintJob(view);
                mWebView = null;
            }
        });
        webView.loadUrl("file:///android_asset/calendar.html");
        mWebView = webView;
    }
    private void createWebPrintJob(WebView webView) {

        // Get a PrintManager instance
        PrintManager printManager = (PrintManager) getActivity()
                .getSystemService(Context.PRINT_SERVICE);

        String jobName = getString(R.string.app_name) + " Document";

        // Get a print adapter instance
        PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(jobName);

        printManager.print(jobName, printAdapter,
                new PrintAttributes.Builder().build());

    }
}

Placeholder2.xml (я изменю имена позже):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/wv">
    </WebView>
    <Button
        android:id="@+id/button"
        android:layout_marginStart="30dp"
        android:layout_marginEnd="30dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/button_text"
        android:layout_centerVertical="true"
        android:backgroundTint="@color/colorPrimary"
        android:drawableStart="@drawable/ic_action_print"
        android:paddingStart="50dp"
        android:paddingEnd="50dp"
        android:textColor="#fff"/>
</RelativeLayout>

Какой правильный способ сделать это?

1 Ответ

0 голосов
/ 15 ноября 2019

Я пытался напечатать WebView, прежде чем его раздувать. Я переместил эти строки:

Button button = container.findViewById(R.id.button);

        //declaring OnClickListener as an object
        View.OnClickListener btnClick = (View v) ->  doWebViewPrint();

        button.setOnClickListener(btnClick);

в функцию onViewCreated. Благодарим Реддитора redditbricks за то, что он заметил мою ошибку.

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