#

Android: onClick in Fragment for Multiple Button Views

 

Wenn man in Android von einer Activity Seite in ein Fragment wechselt, dann können einige Funktionen nicht übernommen werden.

Zunächst steht der android:onClick=".." Eintrag in der xml Seite nicht mehr zur Verfügung.

Die Events des Fragments werden immer erst an die übergeordnete Activity gesendet.

 

Lösung:

Man muss den onClick=".." Eintrag übertragen von der layout/fragment.xml Seite zu der Codebehind seite in java/project/fragment_page.java und diese mit einem onClickListener an einer Resource verbinden.

 

Betrifft:

View Elemente in einem Android Fragment, welche auf den onClick Event reagieren sollen, wobei  in der .xml Seite der android:onClick=".." verwendet ist.

 

 

<Switch
   
android:id="@+id/SwitchAlarm0"
   
android:layout_row="0"
   
android:layout_column="0"
   
android:onClick="SwitchAlarmOnClick"
   
/>

 

 

 

 

Lösung in der .java Seite des Fragments:

 

In der Fragment.java Code Seite fügt man über Ctrl+O die Override Methode onViewCreated ein. Diese Methode wird aufgerufen, sobald die Fragment als View erstellt ist.

 

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

.. …here onClickListener..

 

 

Wenn man mehrere Views abfangen möchte zum Beispiel mehrere Buttons die alle auf den gleichen onClick Event reagieren sollen, dann kann man die Elemente im for-Loop durchlaufen.

Im Beispiel hier werden alle Switch-View Elemente mit der Bezeichnung "SwitchAlarm" 0 bis 6 durchlaufen

Zunächst wird die ID der Fragment Resource in Layouts gesucht und anschliessend mit .setOnClickListener eine Bindung an genau diese Resource erstellt.

 

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
   
//------------< onViewCreated() >------------
   
super.onViewCreated(view, savedInstanceState);
   
//< init >
   
this.fragmentView =  view ;
   
//</ init >

    //----< route switch events >----
    //*get onClick() evente from multiple views in fragment
   
for (int iSwitch=0;iSwitch<7;iSwitch++)
    {
       
int idView=getResources().getIdentifier("SwitchAlarm" + iSwitch,"id", getContext().getPackageName());
       
View eventView =view.findViewById(idView);
       
eventView.setOnClickListener(new View.OnClickListener() {
                                    
@Override
                                    
public void onClick(View view) {
                                         SwitchAlarmOnClick(view);
                                     }
                                 }
        );
    }
   
//----</ route switch events >----

 

 

Mobile

.

0123movie.net