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 >----
|