Я новичок в разработке для Android, и в настоящее время я создавал приложение, используя tabhost и TabActivity для переключения между различными действиями. Это приложение работало нормально, но недавно я обнаружил, что TabActivity устарела, и вместо этого я должен использовать фрагмент.
Итак, я следую этому замечательному руководству, объясняющему, как это сделать: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/
Большая часть этого работает нормально, но есть проблема, некоторые из моих старых действий, которые теперь фрагменты раздували ImageButton с помощью таких методов:
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);
}
Чтобы иметь возможность скомпилировать этот метод внутри фрагмента, я изменил:
LayoutInflater lf = getLayoutInflater();
на
LayoutInflater lf = getActivity().getLayoutInflater();
и
addContentView(btns,params);
на
getActivity().addContentView(btns,params);
Но используя мой метод displayLevelButtons () таким образом, чтобы мои кнопки отображались в правом нижнем углу моего общего вида, а не в правом нижнем углу моего фрагмента.
Я также попытался указать корень при раздувании моего макета кнопками изображения, мой класс всего фрагмента выглядит следующим образом:
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);
}
При этом мои кнопки по-прежнему отображаются внизу моего общего вида, а не внизу моего фрагмента , и если я попытаюсь изменить логическое значение attachToRoot на true:
btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, true);
, я получу ошибку: java.lang.IllegalStateException: У указанного дочернего элемента уже есть родитель. Сначала вы должны вызвать removeView() для родителя дочернего элемента.
Я уверен, что пропустил что-то важное, но не знаю что. Любые предложения будут действительно оценены.
Заранее спасибо,