2016-09-29 4 views
0

이것은 클래스 구조에 대해 더 많은 질문이 될 수 있지만 다음 코드에 클릭 수신기를 간단하게 추가하려고합니다. 클릭하면 "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

옵션 # 1 : 물론

당신이 당신의 MainActivity에서 그것을 할 수 있습니다. 클릭 이벤트를 듣고 자하는 UI 요소를 찾으면됩니다.

// 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 : 당신의 UI 요소가 간단한 Button 경우 예를 들어, 다음과 같은 작업을 수행 할 수

을하지만 당신은 또한 당신의 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

0

가끔은 android studio에서 설치 나 리소스가있는 경로에서 일부 클래스가 발견되지 않습니다.

... setOnclickListener (새에 ClickListener (보기 V) {여기 ... // 더 많은 코드 } : 당신이 확신하는 경우

는 잘 설치, 예를 들어 직접 anonymoue 인터페이스를 구현하려고

)이 작동하지 않는 경우에, 저에게 더 많은 정보를 제공하시기 바랍니다 확인, 해당 인터페이스의 메소드를 구현해야하기 때문에 당신이 컴파일되지해야합니다 활동 인터페이스를 구현하는 butif

+0

감사합니다. 하지만이 문제는 설치를 시도한 것이 아닙니다. 내 문제는 구현에 대한 이해 부족이었습니다. – ayala

1

는, 하나의 클래스는 하나 개의 클래스에서만 파생 될 수 있지만 여러 인터페이스를 가질 수 있습니다. 당신은 당신이 이미 구현 SensorEventListener을 가지고 생각하는

내가 해석 할 수있는 당으로, 당신은 OnClickListener를 인터페이스를 구현하는 문제에 직면하고있다.

쉼표로 구분하여 여러 인터페이스를 쉽게 구현할 수 있습니다. 예 :

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

Ah. 알다시피, 그것은 나에게 훨씬 더 의미가 있습니다. 시간 내 주셔서 감사합니다. – ayala

관련 문제