Android开发 - 在我的MainActivity中实现onClickListener

时间:2016-09-29 21:46:38

标签: java android onclick sensor

这可能更像是关于类结构的问题,但我试图在下面的代码片段中添加一个简单的点击监听器。点击后,它会将“SENSOR_DELAY_FASTEST”值更改为“SENSOR_DELAY_NORMAL”。所以我可以动态切换。但是因为我在MainActivity中,我无法实现onClickListener。谁能给我任何关于如何处理这个问题的指示?

正如我所说。可能只是因为我缺乏Java知识而阻碍了我。也许最好设置另一个类来处理点击?

public class MainActivity extends AppCompatActivity implements SensorEventListener {

private TextView xText, yText, zText;
private Sensor accelerometerSensor;
private SensorManager sensorManager;

@Override
public void onSensorChanged(SensorEvent event) {

    // display the sensor values in the x,y and z text views
    xText.setText("X: " + event.values[0]);
    yText.setText("Y: " + event.values[1]);
    zText.setText("Z: " + event.values[2]);
}

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

    // create sensor manager
    sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

    // create accelerometer sensor
    accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    // register listener
    sensorManager.registerListener(this, accelerometerSensor, SensorManager.SENSOR_DELAY_FASTEST);

    // assign text views
    xText = (TextView)findViewById(R.id.xText);
    yText = (TextView)findViewById(R.id.yText);
    zText = (TextView)findViewById(R.id.zText);
}
}

3 个答案:

答案 0 :(得分:1)

选项#1:

当然,您可以在MainActivity中执行此操作。您所要做的就是找到要监听click事件的UI元素。例如,如果您的UI元素是简单的Button,则可以执行以下操作:

// find button with id "myButtonId" in the XML layout
Button b = (Button) findViewById(R.id.myButtonId);     

// set a listener on that button
b.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) { // gets called when clicked
        // button has been clicked,
        // your code here
    }
});

选项#2:

但您也可以在XML布局中定义,在单击按钮后调用方法onClick_Button()

在XML布局中:

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:id="@+id/myButtonId"
    android:text="Click Me"
    android:onClick="onClick_Button">
</Button>

在您的MainActivity中:

public void onClick_Button(View v) {
        // your code here
}

答案 1 :(得分:1)

在Java中,单个类只能从一个类派生,但可以有多个接口。

  

根据我的解释,你在实施方面遇到了问题   OnclickListener接口就像你认为的那样   实现了SensorEventListener。

您可以通过分隔逗号轻松实现多个界面。例如:

public class MainActivity extends AppCompatActivity implements     SensorEventListener, View.OnClickListener {

private Button button;
private TextView xText, yText, zText;
private Sensor accelerometerSensor;
private SensorManager sensorManager;

@Override
public void onSensorChanged(SensorEvent event) {

// display the sensor values in the x,y and z text views
xText.setText("X: " + event.values[0]);
yText.setText("Y: " + event.values[1]);
zText.setText("Z: " + event.values[2]);
}

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

// create sensor manager
sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

// create accelerometer sensor
accelerometerSensor =    sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

// register listener
sensorManager.registerListener(this, accelerometerSensor,   SensorManager.SENSOR_DELAY_FASTEST);

// assign text views
xText = (TextView)findViewById(R.id.xText);
yText = (TextView)findViewById(R.id.yText);
zText = (TextView)findViewById(R.id.zText);
//Declare button in activity_main.xml
button=(Button)findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v){
   changeSensorDelay();
}
public void changeSensorDelay(){

 //Your own implementation
}
}

答案 2 :(得分:0)

有时当android studio没有找到某些类时它在安装或资源所在的路径中存在应有的问题。

如果你确定它安装得很好,请尝试直接实现界面匿名,例如:

... setOnclickListener(new ClickListener(View v) { ... //这里有更多代码 }

你正在实现你的活动中的接口必须不能编译,因为你必须实现该接口的方法,检查如果不起作用,请给我更多信息