Ich bin neu auf Android-Entwicklung, und ich war im Moment erstellen eine Anwendung mit Tabhost und TabActivity, um zwischen verschiedenen Aktivitäten zu wechseln. Diese Anwendung funktionierte gut, aber ich habe kürzlich entdeckt, dass TabActivity veraltet ist und ich stattdessen Fragment verwenden sollte.Ein Layout mit ImageButton in Fragment programmatisch aufblasen
So folge ich dieses große Tutorial erklärt, wie man dies tun: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/
meisten es funktioniert gut, aber es ist mein Problem einige meiner alten Aktivitäten sind, die jetzt wurden Fragmente Image mit dieser Art Aufblasen von Methoden:
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);
}
sein, um die Lage, dieses Verfahren in einem Fragmente zu kompilieren, geändert I:
LayoutInflater lf = getLayoutInflater();
zu
LayoutInflater lf = getActivity().getLayoutInflater();
und
addContentView(btns,params);
zu
getActivity().addContentView(btns,params);
Aber meiner Methode displayLevelButtons() verwenden, wie dies erscheint in der rechten unteren Ecke meiner allgemeinen Ansicht meine Knöpfe zu machen, nicht in die rechte Unterseite meines Fragments.
Ich habe auch versucht, eine Wurzel zu spezifizieren, wenn mein Layout mit Bild Tasten aufbläst, alle meine Klasse Fragment wie folgt aussehen:
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);
}
Doing so noch meine Tasten sind im Grunde meines allgemeine Ansicht angezeigt werden nicht in die Unterseite meines Fragments, und wenn ich versuche, den attachToRoot boolean Wert auf true zu ändern:
btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, true);
ich den Fehler: java.lang.IllegalStateException: das angegebene Kind hat bereits einen Elternteil. Sie müssen zuerst removeView() für das übergeordnete Element des Kindes aufrufen.
Ich bin sicher, ich habe etwas wichtiges verpasst, aber ich weiß nicht was. Irgendwelche Vorschläge würden wirklich geschätzt.
Vielen Dank im Voraus,
in meiner Methode habe ich versucht: btns = View.inflate (getActivity (), R.layout.mallmapactivity_level_buttons, null); Ich kann "this" nicht verwenden, weil meine Klasse ein Fragment erweitert, also verwende ich stattdessen "getActivity()", aber ich bin mir nicht sicher, ob es die gute Methode ist, meinen Fragmentkontext zu erhalten. Auf jeden Fall noch meine Ansicht aufblasen nach meiner allgemeinen Ansicht nicht nach meinem Fragment – Digoun
Ok eigentlich, mit btns = View.inflate (v.getContext(), R.layout.mallmapactivity_level_buttons, myViewGroup); es funktioniert weiß. Danke – Digoun
Ich habe mehrere Probleme in der Listenansicht gelöst. Willkommen .. –