Android 以编程方式使用片段内的ImageButton膨胀布局

Android 以编程方式使用片段内的ImageButton膨胀布局,android,android-fragments,android-tabhost,Android,Android Fragments,Android Tabhost,我是android开发新手,目前正在使用tabhost和TabActivity创建一个应用程序,以在不同的活动之间切换。这个应用程序运行得很好,但我最近发现TabActivity已被弃用,我应该改用fragment 因此,我遵循这一伟大的教程解释如何做到这一点: 大部分工作正常,但我的问题是,我的一些旧活动现在是碎片,使用这种方法膨胀ImageButton: private void displayLevelButtons() { LayoutInflater lf = getLay

我是android开发新手,目前正在使用tabhost和TabActivity创建一个应用程序,以在不同的活动之间切换。这个应用程序运行得很好,但我最近发现TabActivity已被弃用,我应该改用fragment

因此,我遵循这一伟大的教程解释如何做到这一点:

大部分工作正常,但我的问题是,我的一些旧活动现在是碎片,使用这种方法膨胀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(); 

但是像这样使用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()

我肯定,我错过了一些重要的事情,但我不知道什么。任何建议都将不胜感激


提前感谢,

如果您在膨胀版面时遇到问题,则可以使用以下代码:

View headerView = View.inflate(this, R.layout.layout_name, null);

这将为您提供完整的父布局,然后您可以使用该布局获取所需的任何视图,或者您可以获取布局参数,然后将布局参数设置为任何视图(我认为是您的按钮)。

我遇到了同样的问题,并在该链接中找到了我的答案:

你可以做到这一点,没有任何依赖性

LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.view_with_merge_tag, this);

在我的方法中,我尝试了:btns=View.inflate(getActivity(),R.layout.mallmapactivity\u level\u按钮,null);我不能使用“this”,因为我的类扩展了一个片段,所以我使用了“getActivity()”,但我不确定它是获取片段上下文的好方法。无论如何,这样做仍然会根据我的总体视图而不是根据我的片段来膨胀我的视图。实际上,使用btns=view.inflate(v.getContext(),R.layout.mallmapactivity\u level\u按钮,myViewGroup);你知道,它在起作用。谢谢你为什么回答这个问题?
btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, true);
View headerView = View.inflate(this, R.layout.layout_name, null);
LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.view_with_merge_tag, this);