2016-09-29 11 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内側:Javaでは

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

ありがとうございました。私は今、それの背後にある論理をはっきりと見ることができます。 – ayala

0

場合によっては、アンドロイドスタジオがインストールやリソースのあるパスでいくつかのクラスを見つけられない場合があります。

... setOnclickListener(新しいClickListener(ビューV) {ここ ... //より多くのコード }:あなたが確信している場合

そのほかインストール、例えば直接anonymoueインタフェースを実装しよう

)あなたが動作しない場合は、私に多くの情報を記入してくださいことを確認し、そのインターフェイスのメソッドを実装する必要があるので、あなたは、コンパイルしてはならない、あなたの活動のインタフェースを実装しているbutif

+0

ありがとうございます。私はこれを試したので、問題はインストールではありません。私の問題は、実装に関する理解が不足していたことにありました。 – ayala

1

は、単一のクラスは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

ああ。私は、それは私にもっと意味をなさないことがわかります。あなたの時間をありがとう。 – ayala

関連する問題