Программное расширение макета с помощью ImageButton внутри фрагмента

Я новичок в разработке для 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() для родителя дочернего элемента.

Я уверен, что пропустил что-то важное, но не знаю что. Любые предложения будут действительно оценены.

Заранее спасибо,

7
задан Digoun 20 April 2012 в 04:11
поделиться