Inflar un diseño con ImageButton en Fragmento mediante programación
Soy nuevo en el desarrollo de android, y yo estaba creando una aplicación usando tabhost y TabActivity para cambiar entre diferentes actividades. Esta aplicación funcionaba bien, pero recientemente descubrí que TabActivity está obsoleto y debo usar fragmento en su lugar.
Por lo tanto, sigo este gran tutorial explicando cómo hacerlo: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/
- Reemplazar un fragmento a otro fragmento en el TabHost
- Cómo implementar pestañas ahora que TabActivity está obsoleto
- ¿Cómo obtener el contenido de una pestaña dentro de TabHost?
- Pestañas personalizadas en android
- Crear pestañas más pequeñas en Android
La mayor parte de él trabaja muy bien, pero hay mi problema algunas de mis viejas actividades que ahora son fragmentos estaban inflando ImageButton usando este tipo de métodos:
private void displayLevelButtons() { LayoutInflater lf = getLayoutInflater(); btns = lf.inflate(R.layout.mallmapactivity_level_buttons, null, false); mBtnLevelDown = (ImageButton) btns.findViewById(R.id.btn_level_down); mBtnLevelUp = (ImageButton) btns.findViewById(R.id.btn_level_up); mBtnLevelDown.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { levelDown(); updateLevelButtons(); } }); mBtnLevelUp.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { levelUp(); updateLevelButtons(); } }); LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL | Gravity.RIGHT; addContentView(btns,params); }
Para poder compilar este método dentro de un fragmento, cambié:
LayoutInflater lf = getLayoutInflater();
a
LayoutInflater lf = getActivity().getLayoutInflater();
y
addContentView(btns,params);
a
getActivity().addContentView(btns,params);
Pero usar mi método displayLevelButtons () como esto hace que mis botones aparezcan en la parte inferior derecha de mi vista general, no en la parte inferior derecha de mi fragmento .
También traté de especificar una raíz al inflar mi diseño con botones de imagen, mi clase de todos los fragmentos que se ve así:
public class MyFragment extends Fragment { private View btns; private ImageButton mBtnLevelUp; private ImageButton mBtnLevelDown; private ViewGroup myViewGroup; @Override public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } myViewGroup = container; v = inflater.inflate(R.layout.mallmaptile, container, false); return v; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { //Do some stuff and then : displayLevelButtons(); } private void displayLevelButtons() { LayoutInflater lf = getActivity().getLayoutInflater(); btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, false); mBtnLevelDown = (ImageButton) btns.findViewById(R.id.btn_level_down); mBtnLevelUp = (ImageButton) btns.findViewById(R.id.btn_level_up); mBtnLevelDown.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { levelDown(); updateLevelButtons(); } }); mBtnLevelUp.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { levelUp(); updateLevelButtons(); } }); LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL | Gravity.RIGHT; getActivity().addContentView(btns,params); }
Haciendo así mis botones todavía se muestran en la parte inferior de mi vista general no en la parte inferior de mi fragmento, y si intento cambiar el valor booleano attachToRoot a true:
btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, true);
Tengo el error: java.lang.IllegalStateException: El niño especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero.
Estoy seguro, me perdí algo importante pero no lo que. Cualquier sugerencia sería muy apreciada.
Gracias por adelantado,
- Cualquier método alternativo para Casting de clase
- Android FragmentTabHost
- Barra de título de Android dejando espacio cuando se reanuda la aplicación
- Android: Cómo crear pestañas como las que aparecen en la página de la interfaz de usuario de Android
- ¿Cómo implementar TabHost efecto deslizante?
- Eliminar una pestaña y la actividad (intención) dentro de ella desde un TabHost
- ¿Cómo implementar la actividad tabulada doble en android?
- Android ¿cómo puedo reemplazar el tabhost obsoleto?
Si usted está enfrentando el problema en el diseño de inflado entonces usted puede utilizar código siguiente:
View headerView = View.inflate(this, R.layout.layout_name, null);
Esto le dará la disposición completa de los padres entonces usted puede utilizar esa disposición para buscar cualquier visión que usted desea o usted puede conseguir param del diseño y después fijar param del diseño a cualesquiera opiniónes (en su botón del caso pienso).
Tuve el mismo problema y encontrar mi respuesta en este enlace: problema con inflador
Usted puede hacerlo sin ninguna dependencia
LayoutInflater inflater = LayoutInflater.from(getContext()); inflater.inflate(R.layout.view_with_merge_tag, this);
- Android: la orientación de la pantalla vuelve a cargar la actividad
- ¿Cuál es la diferencia entre Adapter y AdapterView en Android?