Я разделяю некоторые переменные по видам деятельности, используя такой класс:
public class Globals {
static Boolean hint1_graph_type_switcher;
static Boolean hint2_stockview_valuation;
other variables ...
}
тогда я использую эти переменные в любом месте для нескольких моих активностей с ...
if (Globals.hint2_stockview_valuation == false) {
....
}
довольно простой, и он работал до тех пор, пока ...
Я представил кое-что вроде веб-просмотра:
//-----------------------------------------------------------
// open a webview with the NEWS when the more_arrow is clicked :
mNews.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String news_URL = "http://us.m.yahoo.com/w/yfinance/symbolheadlines/"+ ticker + "/?.intl=us&.lang=en";
Intent news_Webview_intent = new Intent(Chart_View.this, News_Webview.class);
news_Webview_intent.putExtra("NEWS_URL", news_URL);
startActivity(news_Webview_intent);
}
});
//-----------------------------------------------------------
и вот класс News_Webview.class:
public class News_Webview extends Activity {
//
// http://www.chrisdanielson.com/tag/progressdialog/
//
String news_URL;
private WebView webview;
private ProgressDialog progressBar;
private static final String TAG = "Hub";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.webview_news);
this.webview = (WebView)findViewById(R.id.webView);
Bundle extras = getIntent().getExtras();
if (this.getIntent().getExtras()!=null){
news_URL = extras.getString("NEWS_URL");
}
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
progressBar = ProgressDialog.show(News_Webview.this, "", "Loading...");
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//Log.i(TAG, "Processing webview url click...");
Intent viewIntent = new Intent("android.intent.action.VIEW", Uri.parse(url));
startActivity(viewIntent);
return true;
}
public void onPageFinished(WebView view, String url) {
//Log.i(TAG, "Finished loading URL: " +url);
if (progressBar.isShowing()) {
progressBar.dismiss();
}
}
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.e(TAG, "Error: " + description);
Toast.makeText(News_Webview.this, "Oh no! " + description, Toast.LENGTH_SHORT).show();
alertDialog.setTitle("Error");
alertDialog.setMessage(description);
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
});
alertDialog.show();
}
});
webview.loadUrl(news_URL);
}
}
проблема в том, что когда он «возвращается» из этого занятия, похоже, что мои глобальные переменные исчезли ???
if (Globals.hint2_stockview_valuation == false) {
выдает ошибку:
06-23 12: 14: 03.443:
ОШИБКА / AndroidRuntime (2611): причина:
java.lang.NullPointerException
2 вопроса, затем:
Должен ли я использовать что-то еще, кроме этого "Глобального" класса, для совместного использования переменных в действиях? Это просто плохая практика? Я знаю, что могу использовать предпочтения, но я думал, что так будет быстрее (нет необходимости «читать» предпочтения каждый раз, когда я начинаю новое занятие ...
Есть идеи, ПОЧЕМУ это происходит? Должен ли я каким-то образом «вернуть» свой сохраненный экземпляр состояния, когда моя активность возвращается из класса News_Webview.class ???
Как всегда, спасибо за помощь.
H.