Estoy creando un fragmento de configuración al extender PreferenceFragment. Necesito saber cuándo el usuario hace clic dentro de una vista de fragmentos (la vista completa) que funciona para fragmentos regulares configurando un evento onClick en el contenedor principal. Sin embargo, esto no funciona cuando uso un PreferenceFragment. Tengo la siguiente configuración en mi activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rootView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:onClick="clickedView">      <---- Observe this click event on the parent view

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</FrameLayout>

Y este es el fragmento de preferencia:

public class SettingsFragment extends android.preference.PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);           
        //Can I do something here to handle the click event??
    }

}

Entonces, si agrego un fragmento regular, se llama al evento onClick cuando toco la pantalla, pero no se llama cuando lo reemplazo con un PreferenceFragment. Supongo que el PreferenceFragment maneja su propio evento de clic y no lo "eleva" a otras vistas. ¿Es posible obtener un onClickEvent en un PreferenceFragment?

0
FewWords 4 abr. 2017 a las 14:57

2 respuestas

La mejor respuesta

Terminé anulando la siguiente función para interceptar eventos táctiles antes de que alcanzaran el PreferenceFragment:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if(ev.getAction() == MotionEvent.ACTION_UP){
        //Do what needs to be done
    }
    return super.dispatchTouchEvent(ev);
}

Si alguien tiene una mejor solución, siéntase libre de compartirla

0
FewWords 5 abr. 2017 a las 06:52

Puede hacer que SettingsFragment implemente OnClickListener y manejar el evento de clic en el Fragment mismo mediante overriding los métodos OnCreateView() y OnClick().

public class SettingsFragment extends android.preference.PreferenceFragment implements View.OnClickListener {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //View view = inflater.inflate(R.layout.fragment_settings, container, false);
        View view = super.onCreateView(inflater, container, savedInstanceState);

        view.setOnClickListener(this);
        return view;
    }

    @Override
    public void onClick(View v) {
        if(v.getId() == R.id.settings_fragment){
            Log.d("TAG", "Settings fragment clicked");
            //Do whatever you want
        }
    }
}

Espero que esto ayuda!!

0
Prashanth 6 abr. 2017 a las 10:12