Gonfler une mise en page avec ImageButton à l'intérieur de Fragment par programmation
Je suis nouveau sur le développement android, et j'étais en train de créer une application utilisant tabhost et un TabActivity pour basculer entre les différentes activités. Cette application fonctionnait bien, mais je viens de découvrir que TabActivity sont obsolètes et que je devrais utiliser fragment de la place.
Donc, j'ai suivi ce tutoriel expliquant comment faire :
http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/
Plus de, il fonctionne très bien, mais il est de mon problème, certains de mes anciennes activités qui sont maintenant des fragments ont été gonflage ImageButton l'utilisation de ce genre de méthodes :
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);
}
Afin d'être en mesure de compiler cette méthode à l'intérieur d'un fragment, j'ai changé:
LayoutInflater lf = getLayoutInflater();
à
LayoutInflater lf = getActivity().getLayoutInflater();
et
addContentView(btns,params);
à
getActivity().addContentView(btns,params);
Mais en utilisant ma méthode displayLevelButtons() comme cela mes boutons s'affiche dans le coin inférieur droit de mon point de vue général, pas en bas à droite de mon fragment.
J'ai aussi essayé de spécifier une racine lors du gonflage ma mise en page avec des boutons image, mon tout fragment de la classe comme ceci :
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);
}
Faire mes boutons sont toujours afficher dans le fond de mon point de vue général pas dans le fond de mon fragment, et si j'essaie de modifier le attachToRoot valeur booléenne true :
btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, true);
J'obtiens l'erreur : java.lang.IllegalStateException: L'enfant spécifié dispose déjà d'un parent. Vous devez appeler removeView() sur le parent de l'enfant en premier.
J'en suis sûr, j'ai raté quelque chose d'important, mais je ne sais pas ce que. Toute suggestion serait vraiment apprécié.
Merci d'avance,
OriginalL'auteur Digoun | 2012-04-20
Vous devez vous connecter pour publier un commentaire.
Si vous êtes confrontés problème à gonfler mise en page, alors vous pouvez utiliser le code suivant:
cela vous donnera complète parent de mise en page vous pouvez ensuite utiliser cette mise en page à chercher quelle que soit vous voulez ou vous pouvez obtenir la mise en page param puis définir la disposition param à tout point de vue (Dans votre cas, le bouton je pense).
Ok en fait, à l'aide de btns = Vue.gonfler(v. getContext(), R. layout.mallmapactivity_level_buttons, myViewGroup); il est de travail. Merci
J'ai résolu plusieurs problème à l'aide de cette liste. Bienvenue..
Pourquoi -2 sur cette réponse ?
OriginalL'auteur Bharat Sharma
J'ai eu le même problème et à trouver ma réponse dans ce lien:
problème avec inflater
vous pouvez le faire sans aucune dépendance
OriginalL'auteur Ashkan