Soy nuevo en el desarrollo de Android, y actualmente estaba creando una aplicación que usa tabhost y TabActivity para cambiar entre diferentes actividades. Esta aplicación funcionaba bien, pero recientemente descubrí que TabActivity está en desuso y que debería usar un fragmento en su lugar.Inflar un diseño con ImageButton dentro de Fragment programmatically
Por lo tanto, seguir este gran tutorial que explica cómo hacerlo: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/
La mayor parte se trabaja muy bien, pero no es mi problema algunos de mis viejos actividades que ahora son fragmentos fueron inflando ImageButton el uso de 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);
}
con el fin de ser capaz de compilar este método dentro de un fragmento, he cambiado:
LayoutInflater lf = getLayoutInflater();
a
LayoutInflater lf = getActivity().getLayoutInflater();
y
addContentView(btns,params);
a
getActivity().addContentView(btns,params);
Pero el uso de mi método displayLevelButtons() como este hacen mis botones aparece en la parte inferior derecha de mi punto de vista general, y no en la parte inferior derecha de mi fragmento.
También probé para especificar una raíz al inflar mi diseño con botones de imagen, mi toda clase fragmento con este aspecto:
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);
}
Si lo hace, mis botones se siguen mostrando en la parte inferior de mi punto de vista general, no en el fondo de mi fragmento, y si trato de cambiar el valor booleano true attachToRoot:
btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, true);
me sale el error: java.lang.IllegalStateException: el niño especificado ya tiene un padre. Primero debe llamar a removeView() en el padre del niño.
Estoy seguro, extrañé algo importante pero no sé qué. Cualquier sugerencia sería realmente apreciada.
Gracias de antemano,
en mi método he intentado: btns = View.inflate (getActivity (), R.layout.mallmapactivity_level_buttons, null); No puedo usar "esto" porque mi clase amplía un fragmento, así que uso "getActivity()" en su lugar, pero no estoy seguro de que sea el mejor método para obtener el contexto de mi fragmento. De todos modos, sigue inflando mi punto de vista de acuerdo con mi opinión general no según mi fragmento – Digoun
Ok en realidad, usando btns = View.inflate (v.getContext(), R.layout.mallmapactivity_level_buttons, myViewGroup); está trabajando sabe. Gracias – Digoun
He resuelto varios problemas usando esto en la vista de lista. Bienvenido ... –