Как использовать WebView и принимать значения из Intent во фрагменте?
Я создал активность с использованием WebView, по определённым причинам мне пришлось переносить код из активности в фрагмент. Тут и начались проблемы. Код фрагмента:
public class DollarFragment extends Fragment {
TextView mTextView;
Button mDollarButton;
WebView mWebView;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dollar_fragment, container,
false);
mTextView = (TextView) view.findViewById(R.id.dollarText);
mWebView = (WebView) view.findViewById(R.id.webView);
Bundle arguments = getIntent().getExtras();
USD usd = arguments.getParcelable(USD.class.getSimpleName());
mTextView.setText("Валюта: " + usd.getName() + "\nКурс: " + usd.getValue());
mDollarButton = (Button) view.findViewById(R.id.dollarButton);
mDollarButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mWebView.setWebViewClient(new WebViewClient());
mWebView.loadUrl("http://www.banki.ru/products/currency/cash/moskva/");
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mDollarButton.setVisibility(View.INVISIBLE);
mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
}
});
return view;
}
@Override
public void onBackPressed(){
if (mWebView.canGoBack()){
mWebView.goBack();
}
else {
super.onBackPressed();
}
}
}
Первая проблема заключается с методом:
@Override // здесь появляется красное подчёркивание
public void onBackPressed(){
if (mWebView.canGoBack()){
mWebView.goBack();
}
else {
super.onBackPressed(); // тут onBackPressed() выделяется красным
}
}
Вторая проблема связана со строкой:
`Bundle arguments = getIntent().getExtras();`// getIntent() выделяется красным
Подскажите, пожалуйста, что с этим делать
Ответы (1 шт):
Автор решения: Andrew
→ Ссылка
У вас подчеркнута onBackPressed() потому что данная функция в фрагменте недоступна насколько я знаю. Для этих целей нужно ловить нажатия на кнопки так:
fragment.getView().setFocusableInTouchMode(true);
fragment.getView().requestFocus();
fragment.getView().setOnKeyListener( new OnKeyListener()
{
@Override
public boolean onKey( View v, int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
return true;
}
return false;
}
} );
А проблема с bundle в том что нет возможности сделать getIntent() что вам и говорит среда. Для получения данных из bundle нужно сделать так:
Bundle bundle = this.getArguments();
if (bundle != null) {
int myInt = bundle.getInt(key, defaultValue);
}
Ну и дальше уже получаете то что передаете.