android – 以编程方式在Fragment中使用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,true);

我收到错误java.lang.IllegalStateException:指定的子级已经有父级.您必须首先在孩子的父母上调用removeView().

我确信,我错过了一些重要但我不知道的事情.任何建议都会非常感激.

提前致谢,

解决方法

如果您在扩充布局时遇到问题,那么您可以使用以下代码
View headerView = View.inflate(this,R.layout.layout_name,null);

这将为您提供完整的父布局,然后您可以使用该布局来获取您想要的任何视图,或者您可以获得布局参数,然后将布局参数设置为任何视图(在您认为的情况下按钮).

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...