yo soy la encapsulación de cosas en un fragmento en el momento y ejecutar en un problema que es difícil de google.
Dentro de mi fragmento son algunos botones con onClick atributos, pero ellos son llamados en la Actividad, más el fragmento de el sistema android – esto hace que encapsulan un poco torpe. Es allí una manera de tener a la reflexión cosas de onClick para llamar en el fragmento? La única solución que yo veo en este momento no es para uso onClick en el xml y haga clic en establecer oyentes en el interior del fragmento a través de código.

InformationsquelleAutor ligi | 2011-09-27

6 Comentarios

  1. 59

    Hablé con algunos empleados @ #adl2011 – reconocen el problema y tal vez habrá una revisión de eso en el futuro. Hasta entonces – uno debe usar .setOnClick en el Fragmento.

    • Eh, usted es la primera persona honesta en S. O. para decir esto. Todos los demás están tratando de encubrir este problema con ridículas explicaciones.
    • No sé si hay una solución a este problema, pero esto se convierte en problamatic cuando se intenta acceder a una casilla de verificación desde OnClickListener no trabajo allí.
    • El problema ha sido resuelto aún?
    • Por dios cuando Google dice que va a arreglar, lo van a solucionar. No hay necesidad de recordarles cada 6 meses!
    • A la derecha, han pasado 4 años y ahora 🙂
    • Todavía no hay ninguna solución ..su 2017 ya!
    • Cuando se abre el fragmento que desea para manejar el evento onClick, trate de sustitución en lugar de simplemente agregar en la parte superior de una actividad.

  2. 8

    El problema es que cuando la presentación se infla aún es el hosting de la Actividad que está recibiendo la clics de botón, no los Fragmentos individuales.

    Yo prefiero usar la siguiente solución para el manejo de eventos onClick. Esto funciona para la Actividad y Fragmentos así.

    public class StartFragment extends Fragment implements OnClickListener{
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
    
            View v = inflater.inflate(R.layout.fragment_start, container, false);
    
            Button b = (Button) v.findViewById(R.id.StartButton);
            b.setOnClickListener(this);
            return v;
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.StartButton:
    
                ...
    
                break;
            }
        }
    }

    Entonces el problema se ha ido.

  3. 5

    A mí me funciona

    Agregar importación:

        import android.view.View.OnClickListener;

    Fragment.java

        ...
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
    
           rootView = (ViewGroup) inflater.inflate(R.layout.fragment, container, false);
    
           Button mButton = (Button) rootView.findViewById(R.id.button);
           mButton.setOnClickListener(new OnClickListener() {
              public void onClick(View v) {
    
              }
           });
           return rootView;
        }
  4. 2

    TEMA:

    1.En XML atributo onClick le llame la actividad pública del método.

    2.Fragmento del método público no se llama.

    3.Fragmento de la reutilización.

    SOLUCIÓN:

    En Fragmento del diseño añadir esta a la Vista.

    android:onClick="onFragmentViewClick"

    En cada actividad el fragmento pertenece..

    public void onFragmentViewClick(View v) {
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container);
        if (fragment != null && fragment.isVisible()) {
            if (fragment instanceof SomeFragment) {
                ((SomeFragment) fragment).onViewClicked(v);
            }
        }
    }

    En el Fragmento incluir este método..

    public void onViewClicked(View v) {
        switch (v.getId()) {
            case R.id.view_id:
                Log.e("onViewClicked", "yehhh!!");
                break;
        }
    }
  5. 0

    Usted podría tener el oyente que se llama en la actividad de desviar la llamada a un oyente en el fragmento. Usted debe tener una referencia para el fragmento dentro de la FragmentActivity para pasar la llamada. Se le tiene que echar para llamar al método o a sus fragmento de implementar una interfaz que defina. Sé que no es la mejor solución, pero va a trabajar. También se puede utilizar la etiqueta de un botón para especificar el nombre del método a llamar, si quería. Espero que esto ayude un poco.

    • ¿Tienes un ejemplo de código?
    • Sí… no limpia o solución conveniente, tratando de ir de abajo a arriba se cae…
  6. 0

    Probar esto…

     @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //Inflate the layout for this fragment
        View rootView =  inflater.inflate(R.layout.activity_ipadditional_users, container, false);
    
        FloatingActionButton button7 = (FloatingActionButton) rootView.findViewById(R.id.fab_ip_additional_user);
        button7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getActivity(), IPAdditionalUsersEdit.class);
                startActivity(intent);
            }
        });
    
        return rootView;

Dejar respuesta

Please enter your comment!
Please enter your name here