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

Android development - Implementing onClickListener in my MainActivity

这可能更多是关于 class 结构的问题,但我正在尝试向以下代码添加一个简单的点击监听器。单击后,它会将 "SENSOR_DELAY_FASTEST" 值更改为 "SENSOR_DELAY_NORMAL"。所以我可以即时切换。但是因为我在 MainActivity 中,所以我无法实现 onClickListener。谁能给我任何关于如何处理这个问题的指示?

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

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);
}
}

有时 android studio 没有发现一些 类 它在安装或资源所在路径中的应有问题。

如果你确定它安装好了,尝试直接匿名实现接口例如:

...setOnclickListener( new ClickListener( 查看 v) { ...//更多代码在这里 }

)

但是如果你在你的activity中实现接口一定不能编译,因为你必须实现那个接口的方法,检查如果不工作,请给我更多信息

选项#1:

当然可以在 MainActivity 中完成。您所要做的就是找到要监听点击事件的 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
}

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

As per as I can interpret, you are facing problem in implementing OnclickListener interface as you think that you have already implemented 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
}
}