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

问题描述:

这可能更多的是关于类结构的问题,但我试图在下面的一段代码中添加一个简单的点击监听器。点击后,它会将“SENSOR_DELAY_FASTEST”值更改为“SENSOR_DELAY_NORMAL”。所以我可以即时切换。但由于我在MainActivity中,我无法实现onClickListener。任何人都可以告诉我如何处理这个问题?Android开发 - 在我的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); 
} 
} 

选项#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 
} 
+0

谢谢你的时间。我现在可以清楚地看到它背后的逻辑。 – ayala

有时当android studio没有发现某些类在安装时遇到问题或者资源所在的路径时。

如果你确定它安装好,试图直接anonymoue实现接口,例如:

... setOnclickListener(新ClickListener(视图v){ ... //更多代码在这里 }

butif你实现你的活动不得编译接口,因为你要实现该接口的方法,检查,如果不工作,请给我更多的信息

+0

谢谢。但问题不在于安装,因为我已经尝试了这一点。我的问题更多的是缺乏对实施的理解。 – ayala

在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 
} 
} 
+0

啊。我明白了,这对我来说更有意义。感谢您的时间。 – ayala