【问题标题】:ShakeActivity 1st launch to be neglectedShakeActivity 第一次发布被忽略
【发布时间】:2015-07-08 14:24:39
【问题描述】:

我想创建一个带有 Shakeactivity 的 web 视图。在当前活动的 xml 中,我将 webview 的可见性设置为 invisibe。现在,我有了这个shakeevent 监听器。一切工作正常,除了我在第一次启动时启动这个shakeactivity,它在我包含的文本中显示shaking,我在onShake()函数中有。但是,我不想要那个。我想忽略这个shakeactivity的第一次启动,在第二次摇动之后我想刷新shakeactivity以加载一个url和webview的可见性。

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebView;
import android.widget.Toast;

public class MainActivity extends Activity implements
        ShakeEventManager.shakeListener {
    private ShakeEventManager sd;
    private static long back_pressed;
    Boolean isInternetPresent = false;
    private int count = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
        createData();
        sd = new ShakeEventManager();
        sd.setListener(this);
        sd.init(this);
    }

    private void createData() {
        WebView web = (WebView) findViewById(R.id.webview);
        web.getSettings().setJavaScriptEnabled(true);
        web.getSettings().setPluginsEnabled(true);
        web.loadUrl("http://www.google.com");
    }

    @Override
    public void onShake() {
        count++;
        if (count >= 1) {
            ConnectionDetector cd = new ConnectionDetector(
                    getApplicationContext());
            isInternetPresent = cd.isConnectingToInternet();
            Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            vibrator.vibrate(1000);
            if (isInternetPresent) {
                createData();
            } else {
                Toast.makeText(getApplicationContext(),
                        "Enable Data Connection", Toast.LENGTH_LONG).show();
            }
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        sd.register();
    }

    @Override
    protected void onPause() {
        super.onPause();
        sd.deregister();
    }

    @Override
    public void onBackPressed() {
        finish();
    }
}

【问题讨论】:

  • 你能提供更多可读的代码吗?
  • 他不知道如何格式化所以我编辑了:) @RandykaYudhistira

标签: java android


【解决方案1】:

您的count++ 变量在第一次检查条件之前首先增加值,这样您可能必须像我所做的那样增加if,或者您可以将此语句放在最后一个条件之后。

如下变化:

    @Override
    public void onShake() {

        if (count++ >= 1) {
            ConnectionDetector cd = new ConnectionDetector(
                    getApplicationContext());
            isInternetPresent = cd.isConnectingToInternet();
            Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            vibrator.vibrate(1000);
            if (isInternetPresent) {
                createData();
            } else {
                Toast.makeText(getApplicationContext(),
                        "Enable Data Connection", Toast.LENGTH_LONG).show();
            }
        }
    }

注意:我没有测试过,但我只是看到了你的代码并发现了这个 逻辑错误,所以可能对你有帮助:)

【讨论】:

  • 感谢 pratik 的帮助,请您检查 createData() 函数中的代码。它要求我使用浏览器完成我的操作,但我希望 google.com 在我的活动中的 web 视图中打开。
  • 这将帮助你...继续搜索亲爱的...stackoverflow.com/a/10226126/1318946
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
相关资源
最近更新 更多