这可能更像是关于类结构的问题,但我试图在下面的代码片段中添加一个简单的点击监听器。点击后,它会将“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);
}
}
答案 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) { ... //这里有更多代码 }
)
你正在实现你的活动中的接口必须不能编译,因为你必须实现该接口的方法,检查如果不起作用,请给我更多信息