PDA

Ver la Versión Completa : [ CONSULTA ] Poner eventos a un fragment como si fuera una actividad


LEAJIM_454
17/09/14, 02:39:48
Hola, estuve haciendo un listView pero por mucho que intentaba no lo lograba ahora lo hare de otra manera esa parte de mi aplicacion y es que implemente un tabhosy para hacer un navigation drawer creo que se llama asi y queria saber como hacer para implementar algo en funcion a lo que se esta mostrando este es mi codigo:

package com.JimSoft.Table;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MainActivity extends FragmentActivity{

SectionsPagerAdapter mSectionsPagerAdapter;

// Host de todo el contenido
ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Crea el Adapter que devuelve un Fragment por cada sección
mSectionsPagerAdapter = new SectionsPagerAdapter(
getSupportFragmentManager());

// Establece el ViewPager con las secciones del Adapter
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);

}

@Override
protected void onStart() {
super.onStart();

// Establece por Default la Posición 1
mViewPager.setCurrentItem(0);
}

/**
* Devuelve un Fragment Correspondiente en cada Seccion/Tab/Pagina
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {

public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {

Fragment fragment = new Fragment();
Bundle args = new Bundle();

switch (position) {
case 0:
fragment = new Fragment_1(); // Fragment 1
fragment.setArguments(args);
break;
case 1:
fragment = new Fragment_2(); // Fragment 2
fragment.setArguments(args);
break;
case 2:
fragment = new Fragment_3(); // Fragment 3
fragment.setArguments(args);
break;
default:
break;
}

return fragment;
}

@Override
public int getCount() {
// Total de páginas
return 3;
}

@Override
public CharSequence getPageTitle(int position) {

switch (position) {
case 0:
return "Titulo 1";
case 1:
return "Titulo 2";
case 2:
return "Titulo 3";
}

return null;
}
}


public static class Fragment_1 extends Fragment {

public Fragment_1() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.fragment_main, container,
false);

return rootView;
}

}

public static class Fragment_2 extends Fragment {

public Fragment_2() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.fragment_second, container,
false);

return rootView;
}

}

public static class Fragment_3 extends Fragment{
public Fragment_3() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_third, container,
false);


return rootView;
}





}





}


Y queria hacer algo asi
if(Se esta mostrando el fragment 1){
Hacer que el TTS funcione y diga algo
}

No se si me entienden, gracias por su ayuda realmente se los agradezco.

LEAJIM_454
18/09/14, 18:57:50
Alguien que pueda ayudarme por favor?, estoy dias con esto y no se que hacer, hasta visite stackoverflow y no existe algo concreto, gracias de nuevo.

kriogeN
18/09/14, 19:21:48
El ciclo de vida de un Fragment es un poco distinto al de una Activity, de todas formas para lo que quieres hacer puedes usar los eventos de la Activity, comprobando que el Fragment que es visible en ese momento es el fragment1.

LEAJIM_454
18/09/14, 20:16:28
El ciclo de vida de un Fragment es un poco distinto al de una Activity, de todas formas para lo que quieres hacer puedes usar los eventos de la Activity, comprobando que el Fragment que es visible en ese momento es el fragment1.

Gracias por tu respuesta, intente usar onClickListener y al hacer click en el boton me da error y uso en este un swith, luego probe con un onClick desde el layout y una public void y tampoco el problema persiste.

este es el fragment en el que estoy trabajando, gracias kriogeN por tu respuesta.

package com.JimSoft.Entertainment.Edu.LearnWithEnuma;

import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;

public class HumoDeFelicidad extends Fragment implements OnInitListener, OnClickListener {
private String DescripcionCuentoHumoDeFelicidadString;
private TextToSpeech TTSEnuma;
private String DescripcionHumo;
public HumoDeFelicidad() {
}

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
DescripcionCuentoHumoDeFelicidadString = (String)getString(R.string.descripcion_humo_de_fel icidad);
DescripcionHumo = (String)getString(R.string.descripcion_humo_de_fel icidad);


View rootView = inflater.inflate(R.layout.activity_menu_cuentos_hu mo_de_felicidad_fragment, container,
false);
return rootView;
}

public void DescripcionCuentoHumoDeFelicidad(View v){
ParametrosTTS(DescripcionCuentoHumoDeFelicidadStri ng);
}

public void ParametrosTTS(String str) {
TTSEnuma.speak(str, TextToSpeech.QUEUE_FLUSH, null);
TTSEnuma.setPitch(0.0f);
TTSEnuma.setSpeechRate(-2.0f);
}

@Override
public void onInit(int status) {
ParametrosTTS(DescripcionCuentoHumoDeFelicidadStri ng);
}

@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.BotonDescipcionHumoDeFelicidad:
HablarAmigo();
break;

}

}

private void HablarAmigo() {
ParametrosTTS(DescripcionHumo);

}
}


Edito: Me conformo con que un boton se pueda pulsar y con eso lo tendria solucionado, no hay nada que me funcione hasta ahora.