Заполните счетчик массивом строк, возвращаемых из функции Javascript в макете фрагмента. - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь заполнить счетчик в макете фрагмента массивом строк, которые я получаю из функции Javascript моей страницы WebView.

Это мой сценарий: я в фрагменте 1, которыйимеет веб-просмотр1.Я нажимаю на что-то в webview1 и перехожу к фрагменту 2, в котором есть другой WebView2.Я хочу заполнить счетчик во фрагменте 2 массивом, возвращенным функцией, записанной на странице, которая загружается в WebView2.

Функция js, записанная на странице, которая будет загружаться в WebView2:

function test(){
    var cars = ["Saab", "Volvo", "BMW"];
    window.JSInterface.callback(cars);
}

А это мой код фрагмента2:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    view = inflater.inflate(R.layout.fragment_edificio, container, false);

    ...

    wv.getSettings().setJavaScriptEnabled(true);
    Fragment2.JavaScriptInterface jsInterface = new 
                   Fragment2.JavaScriptInterface(getActivity());
    wv.addJavascriptInterface(jsInterface, "JSInterface");
    wv.loadUrl("file:///android_asset/"+idEdificio+"-p0.html"); // point it to the SVG
    wv.setBackgroundColor(0x00000000);

    wv.setWebChromeClient(new WebChromeClient() {

        public void onProgressChanged(WebView view, int progress) {
            progressBar.setProgress(progress);
            if(progress == 100) {
                //wait for page to load

                wv.loadUrl("javascript:test()");                   
            }
        }
    });


    return view;
}

А это мой JSInterface для обратных вызовов со страницы WebView

public class JavaScriptInterface {
    private Activity activity;

    public JavaScriptInterface(Activity activity) {
        this.activity = activity;
    }

    @JavascriptInterface
    public void loadEdificio(){

        loadFragment(new FragmentEdificio());
    }
    @JavascriptInterface
    public void callback(String[] value) {
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                getActivity(), android.R.layout.simple_spinner_item, value);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    }
}

Что происходит, когда я получаю возвращенный массив, носпиннер не заполняется, но если поместить эти строки в OnCreateView (), спиннер заполняется:

String[] value = {"value1", "value2"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
            getActivity(), android.R.layout.simple_spinner_item, value);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);;

Из того, что я понял, обратные вызовы из веб-просмотра обрабатываются в другом потоке ито, что я пытаюсь сделать, не может быть сделано.Есть ли другой способ сделать это?Или я что-то упустил?

Заранее спасибо!

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