如何在两个不同的类别中设置不同的抖动检测?

问题描述 投票:0回答:1

我创建了一个应用,该应用可以从摇动的第一页转到第二页。但是,它不会从第二页返回到第一页。关闭首页时,如何停止摇动活动?

我在两个页面中都实现了onShake()方法。

这是主要活动:

公共类MainActivity扩展AppCompatActivity实现ShakeDetector.Listener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    TextView t= (TextView) findViewById(R.id.t1);

    t.setText("Hello World");

    SensorManager SM=(SensorManager)getSystemService(SENSOR_SERVICE);
    ShakeDetector SD=new ShakeDetector(this);
    SD.start(SM);
}

@Override
public void hearShake() {
    getWindow().getDecorView().setBackgroundColor(Color.GREEN);
    OpenActivityNew();
}

private void OpenActivityNew() {
    Intent intent=new Intent(this,TimeDone.class);
    finish();
    startActivity(intent);
}

}

这是第二个活动:

public class TimeDone extends AppCompatActivity implements  ShakeDetector.Listener{
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.timer_layout);


    TextView t= (TextView) findViewById(R.id.t2);

    t.setText("This is Second Page");

    SensorManager SM=(SensorManager)getSystemService(SENSOR_SERVICE);
    ShakeDetector SD=new ShakeDetector(this);
    SD.start(SM);
}
@Override
public void hearShake() {
    getWindow().getDecorView().setBackgroundColor(Color.GREEN);
    OpenActivityNew();
}

private void OpenActivityNew() {
    Intent intent=new Intent(this,MainActivity.class);
    finish();
    startActivity(intent);
}

我在两个类上都实现了相同的功能,因此从一个页面摇动将转移到另一页面,反之亦然。但这仅在MainActivity中起作用。

android android-studio
1个回答
0
投票

[正如我在您的代码中看到的,您在两个活动中都在ShakeDetector中启动了onCreate(),但没有停止它。因此,您需要先停止它,然后再在OpenActivityNew()内部启动另一个活动,如下所示:

SD.stopShakeDetector(getBaseContext());

,为此,您当然需要在SensorManager SM之外声明ShakeDetector SDonCreate()。只需将它们作为Class变量放在外面,就可以像这样正常工作:

MainActivity

public class MainActivity extends AppCompatActivity implements ShakeDetector.Listener {
    private ShakeDetector SD;
    private SensorManager SM;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        SM=(SensorManager)getSystemService(SENSOR_SERVICE);
        SD=new ShakeDetector(this);
        ...
    }
    ...
    private void OpenActivityNew() {
        SD.stopShakeDetector(getBaseContext());
        Intent intent=new Intent(this,TimeDone.class);
        finish();
        startActivity(intent);
    }
© www.soinside.com 2019 - 2024. All rights reserved.