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/

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,

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: ¿Cómo cambiar dinámicamente el contenido de la pestaña inflada?
  • Buscar usuarios en el host de pestañas android
  • ¿Por qué onResume se llama cuando abro por primera vez la pestaña de un tabhost?
  • Android, la intención no funciona?
  • ¿Las pestañas anidadas con el visor de desplazamiento en android?
  • TabHost / TabWidget - Escala de la imagen de fondo?
  • La aplicación de cámara de llamadas recrea la actividad de Android
  • Androide. Cómo cambiar la actividad dentro de una pestaña
  • Android - android.widget.TabHost no se puede convertir en android.support.v4.app.FragmentTabHost
  • Android - Tabhost trabajando en la clase de actividad
  • Deshabilitar las teclas DPAD en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.