2016-06-20 7 views
2

Dies ist die einfachste Version, in der ich meine Frage berechtigt hätte.Können wir onClickListener Funktionalität der Schaltflächen in Layout von onOptionsItemSelected() klicken Sie auf

Problem: Angenommen, zwei Schaltflächen funktionieren gut mit ihrer Funktionalität in einer Aktivität. Was ich will ist, dass, wenn wir auf ein Element von Menüpunkten klicken, wie könnten wir (wenn möglich) es eine der Schaltflächen auf ClickListener integrieren, so dass es die gleiche Funktionalität ausführen würde, wie eine dieser Schaltflächen bereits ausgeführt wird.

Szenario: Nehmen wir an, wir haben zwei Schaltflächen in XML-Dateien implementieren onCLickListener-Schnittstelle. Beim Klicken auf den Menüeintrag wurde der innere Klassenkonstruktor initialisiert, aber es geht nicht weiter, was sinnvoll ist. Kann mir irgendjemand sagen, welche Möglichkeiten es gibt, mit der Logik zu arbeiten, die ich hier einbetten möchte.

cameraButton.setOnClickListener(new MyButtonClickListener(MyConstants.OPEN_CAMERA)); 
mediaButton.setOnClickListener(new MyButtonClickListener(MyConstants.OPEN_MEDIA)); 

wo MyButtonClickListener ist eine innere Klasse

private class MyButtonClickListener implements View.OnClickListener { 

    private int preference; 

    public MyButtonClickListener(int preference) { 
     this.preference = preference; 
     Log.e("Pref in Constructor:", String.valueOf(preference)); 

    } 

    public MyButtonClickListener() { 
    } 

    @Override 
    public void onClick(View v) { 
     Log.e("Pref in onClick:", String.valueOf(preference)); 
     startScan(preference); 
    } 
} 

und das Verfahren startScan ist:

public void startScan(int preference) { 
    Log.e("Pref: StartScan Method:", String.valueOf(preference)); 

    Intent intent = new Intent(this, MyActivity.class); 
    intent.putExtra(MyConstants.OPEN_INTENT_PREFERENCE, preference); 
    startActivityForResult(intent, REQUEST_CODE); 
} 

onOptionsItemSelected:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    switch (id) { 

    case R.id.gallery: 
    new MyButtonClickListener(MyConstants.OPEN_MEDIA); 
    //return true; 
+0

"startScan" -Methode in 'onOptionsAtemSelected' aufrufen. –

+0

Von was ich von Ihrer Frage verstanden habe, können Sie 'button.callOnClick()' verwenden? Ist das, was du fragst? –

+0

@MalithLakshan Ja, ich wollte die gleiche Aktion ausführen, MediaButton tut. Und es funktionierte durch Aufruf von startScan in onOptionsItemSelected Methode. Vielen Dank – Umair

Antwort

1

Als Ihr startScan() Methode bel Auf Ihre Aktivität/Fragment-Klasse können Sie direkt im erforderlichen case Block Ihrer onOptionsItemSelected() Methode zugreifen. Sie müssen dafür nicht über eine Schnittstelle gehen.

Verwandte Themen