Brindis en el interior de método onClick en el Fragmento

Tengo un Fragmento siguiente:

public class FragmentSocial extends Fragment implements ActionBar.TabListener, OnClickListener 
{

private Fragment mFragment;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getActivity().setContentView(R.layout.fragment_social);
}

public void onTabSelected(Tab tab, FragmentTransaction ft) {
    //relevant code...
}

public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    //relevant code...
}

public void onTabReselected(Tab tab, FragmentTransaction ft) {
    //TODO Auto-generated method stub

}

public void onClick(View v) {
    switch(v.getId())
    {
    case R.id.imgBtnFB:
        Toast.makeText(this, "FB pressed", Toast.LENGTH_LONG).show();
        break;
    case R.id.imgBtnTwitter:
        Toast.makeText(this, "Twitter pressed", Toast.LENGTH_LONG).show();
        break;
    }

}

Tengo un par de imágenes de los botones en mi fragment_social diseño. Por ahora sólo quiero hacer un Brindis mensaje para ver qué botón fue pulsado. Sin embargo, si uso this como contexto, que estoy recibiendo este mensaje de error:
El método makeText(Contexto, CharSequence, int) en el tipo de pan Tostado no es aplicable para los argumentos (FragmentSocial, String, int)
He intentado cambiar de this a FragmentSocial.this, a FragmentSocial.this.getActivity(), trató de crear private Context mContext y crear una instancia para mContext = (I tried various options here) dentro del método onCreate – pero nada funcionó. Yo no tenía un mensaje de error, pero no veía el Brindis, o tiene otros errores.

Entonces, ¿cómo puedo crear un Brindis aquí?

Gracias!

InformationsquelleAutor Igal | 2013-03-12

5 Kommentare

  1. 12

    uso:

    getActivity().getBaseContext();
    • Qué quiere decir como que: Toast.makeText(getActivity().getBaseContext(), "FB pressed", Toast.LENGTH_LONG).show();? Probado, aún no funciona… También trató de Toast.makeText(FragmentSocial.this.getActivity().getBaseContext(), "FB pressed", Toast.LENGTH_LONG).show(); – no trabajo, no veo la Tostada.
    • a la derecha. que deben trabajar. Poner De Registro.d(«prueba», «prueba») dentro de la onClick() y ver si usted tiene un mensaje en el Logcat. Usted sabe, entonces, si su onClick() llama al método o no.
    • Nop, yo no vi el mensaje de Registro. Supongo que estoy haciendo algo mal aquí… yo también traté de hacer algo como eso en el método onCreate: findViewById(R.id.imgBtnFB).setOnClickListener(this); pero ni siquiera tengo la findViewById método disponible por algún motivo.
    • Intenta inflar el layout de onCreateView():
    • Quitar todo, desde onCreate (mantener en el super) y crear onCreateView() como este: @Override public Ver onCreateView(LayoutInflater inflater, ViewGroup contenedor, Bundle savedInstanceState) { View View = inflater.inflate(R. layout.fragment_social, contenedor, false); return view; }
    • Sí, lo hice, quería escribir aquí que el problema está solucionado 🙂 Después de que me he registrado los botones para onClickListener como que: view.findViewById(R.id.imgBtnFB).setOnClickListener(this); y todo lo que finalmente trabajado como se debe! Muchas gracias! 🙂
    • He utilizado getApplication() en lugar de getActivity() en pan Tostado.makeText(getActivity().getBaseContext(), «FB presionado», Toast.LENGTH_LONG).show();, así que he usado pan Tostado.makeText(getApplication().getBaseContext(), «FB presionado», Toast.LENGTH_LONG).show(); y a mí me funcionó

  2. 3

    Si usted está usando fragmento, a continuación, utilizar este código

    Toast.makeText(getActivity(), "You have insufficient points", Toast.LENGTH_LONG ).show();
    • Esta es la más corta y más sencilla solución.
  3. 2

    Cualquiera de las siguientes líneas de trabajo.

    Toast.makeText(getActivity(), "hello",Toast.LENGTH_LONG).show();
    Toast.makeText(getActivity().getApplicationContext(),"Hello",Toast.LENGTH_LONG).show();
  4. 0

    Esta es la forma en que hago en el fragmento

    //editar

     YourActivity activity;
    
    
    @Override
    public void onAttach(Activity activity) {
       this.activity = (YourActivity) activity;
    }
    
    @Override
    public void onClick(View v) {
        Toast.makeText(this.activity, "message", Toast.LENGTH_LONG).show();
    }
    • El inconveniente de este enfoque es que usted es la asignación de un fragmento de una actividad. Así que no es reutilizable con otras actividades.
  5. 0

    La ampliación de la respuesta por Marcin S., también se puede configurar el constructor en el interior del Fragmento y de paso en un contexto variable. Usted puede utilizar este contexto, en cualquier momento usted desea para referencia de la actividad. Este método también es ligeramente más rápido, a continuación, getActivity().getBaseContext()

    Agregar esto a su FragmentSocial clase:

    Context context;
    public FragmentSocial(Context context) {
        this.context = context;
    }

    Cuando usted diga FragmentSocial fragmentSocial = new FragmentSocial(); en su actividad principal de la clase, agregue el parámetro this en el () para hacer que se vea como FragmentSocial fragmentSocial = new FragmentSocial(this);

    • ¿Tiene usted un ejemplo para que, tal vez? Quizá funcione…
    • Comprobar mi revisado respuesta.
    • Lo he probado y tengo este mensaje de error: de Evitar los constructores predeterminados en fragmentos: el uso de un constructor predeterminado plus Fragmento#setArguments(Bundle) en lugar yo también tenía que crear un constructor vacío, como he tenido más errores (yo tienen este código en mi onTabSelected método – mFragment = new FragmentSocial();)

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea