2016-07-12 9 views
2

Wie können Sie es so einrichten, dass Benutzer mehrere Schaltflächen mit Klick-Listenern haben können? Ich probierte es mit 2 Tasten, aber es hieß, dass ich den On-Click-Listener bereits definiert hatte, so dass ich keinen weiteren Click-Listener erzeugen konnte. Der Code, den ich bisher habe, ist:Hinzufügen mehrerer Klick-Listener für mehrere Schaltflächen

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.view.View; 
import android.widget.LinearLayout; 

public class MainActivity extends AppCompatActivity { 

    private View btnRender; 
    private LinearLayout container; 
    private View btnRendered; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btnRender = (View)findViewById(R.id.btn_render); 
     container = (LinearLayout)findViewById(R.id.fragment_layout); 
     btnRendered = (View) findViewById(R.id.btn_rendered); 

     //set event handling for button 
     btnRender.setOnClickListener(onClickListener()); 
    } 

    private View.OnClickListener onClickListener() { 


     return new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //replace fragment when clicked 
       FragmentManager fm = getSupportFragmentManager(); 
       FragmentTransaction ft = fm.beginTransaction(); 
       ft.replace(R.id.fragment_layout, new PDFRenderFragment()); 
       ft.commit(); 

       //gone button after all 
       btnRender.setVisibility(View.GONE); 
       container.setVisibility(View.VISIBLE); 
      } 
     }; 


     } 
} 

Die btn_rendered ist die andere Taste, die ich für einen auf Klick Zuhörer einstellen möchten, aber die Software lässt mich das nicht. Stimmt es, dass ich eine Switch-Case-Methode einrichten muss, damit es funktioniert?

Ich habe gerade beide Codes ausprobiert und keiner von ihnen scheint den gewünschten Effekt zu haben. Wenn ich nun auf einen der Buttons klicke, wird immer das 2. pdf angezeigt! (Was ich die Taste für verwendet wurde)

+0

Fügen Sie den Code für diese Schaltfläche hinzu. Und zeigen Sie den Kompilierungsfehler an. – greenapps

+0

Das klingt seltsam. Können Sie den Code posten, den Sie versucht haben, den zweiten Listener auf der anderen Schaltfläche hinzuzufügen? – user6547359

+0

'btnRender.setVisibility (View.GONE);'. Wollen Sie diese Schaltfläche also ausblenden, wenn Sie die andere Taste drücken? – greenapps

Antwort

1

Sie können wie folgt umgehen.

btnRender.setOnClickListener(onClickListener()); 
btnRendered.setOnClickListener(onClickListener()); 

private View.OnClickListener onClickListener() { 


     return new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       switch(v.getId()){ 
       case R.id.btn_render: 
       //replace fragment when clicked 
       FragmentManager fm = getSupportFragmentManager(); 
       FragmentTransaction ft = fm.beginTransaction(); 
       ft.replace(R.id.fragment_layout, new PDFRenderFragment()); 
       ft.commit(); 

       //gone button after all 
       btnRender.setVisibility(View.GONE); 
       container.setVisibility(View.VISIBLE); 
       break; 
       case R.id.btn_rendered: 
       // your logic here 

       break; 
      } 
      } 
     }; 
    } 
0

Sie können dieselbe Methode auch für die zweite Schaltfläche verwenden und if/else verwenden, um festzustellen, welche Schaltfläche in dieser Methode geklickt wird. wie unten Code.

//set event handling for button 
btnRender.setOnClickListener(onClickListener()); 
second_btn.setOnClickListener(onClickListener()); 

Ihre OnClickListener Methode.

private View.OnClickListener onClickListener() { 


     return new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //replace fragment when clicked 
       if (v == btnRender) { 
        FragmentManager fm = getSupportFragmentManager(); 
        FragmentTransaction ft = fm.beginTransaction(); 
        ft.replace(R.id.fragment_layout, new PDFRenderFragment()); 
        ft.commit(); 

        //gone button after all 
        btnRender.setVisibility(View.GONE); 
        container.setVisibility(View.VISIBLE); 
       } else if (v == second_btn) { 
        //second button click code 
       } 
      } 
     }; 
    } 
+0

Vielen Dank! – Desthstro