0

我有一个名为 MyActivity 的活动。MyActivity 使用 WebView 来显示网页。
我还有一个如下所示的选项活动。O 也有/res/xml/options.xml
当用户更改选项中的某些内容时,我运行MyUtility.setOptionsChanged()方法。

我的问题是当用户更改首选项 XML 中的某些内容时。当用户按下后退按钮时,我需要用发布数据重新加载当前的 webview URL 吗?

你能检查下面的代码,我应该把那个逻辑放在哪里?我应该添加到 MyOptionsActivity 的 onKeyDown 方法还是?

public class MyActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        mContext = getApplicationContext();

        super.onCreate(savedInstanceState);
        setContentView(R.layout.myweb);

        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.setWebViewClient(new myWebViewClient());

        String postData = MyUtility.getOptionsDataForPOSTURL(mContext);
        mWebView.postUrl("http://example.com", EncodingUtils.getBytes(postData, "BASE64"));
    }

    public class myWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
               String postData = MyUtility.getOptionsDataForPOSTURL(mContext);
               view.postUrl(url, EncodingUtils.getBytes(postData, "BASE64"));
        }
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if(mWebView.canGoBack()) {
                mWebView.goBack();
            } else {
                super.onBackPressed();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

  public class MyOptionsActivity extends PreferenceActivity
            implements SharedPreferences.OnSharedPreferenceChangeListener {
    Context mContext;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        mContext = getApplicationContext();
        super.onCreate(savedInstanceState);
        getPreferenceManager().setSharedPreferencesName("myoptions");
        addPreferencesFromResource(R.xml.options);
    }

    @Override
    public void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
        super.onPause();
       getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        MyUtility.setOptionsChanged(mContext,true);
    }
  }


public class MyUtility {
    public static void setOptionsChanged(Context pContext, Boolean pOptionsChanged) {
        SharedPreferences prefs = pContext.getSharedPreferences("general", 0);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putBoolean("optionsChanged", pOptionsChanged);
        editor.commit();
    }
}
4

1 回答 1

0

关于@Hiren Dabhi 的评论,最好的地方是 Activity 的 onRestart 方法。它运作良好。

于 2013-11-19T06:38:50.610 回答