Я пытаюсь заполнить счетчик в макете фрагмента массивом строк, которые я получаю из функции 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);;
Из того, что я понял, обратные вызовы из веб-просмотра обрабатываются в другом потоке ито, что я пытаюсь сделать, не может быть сделано.Есть ли другой способ сделать это?Или я что-то упустил?
Заранее спасибо!