如何以编程方式添加片段的RelativeLayout [英] How to add fragments programmatically in relativelayout

查看:165
本文介绍了如何以编程方式添加片段的RelativeLayout的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经设计了一个RelativeLayout的。我试图片段添加到它。它重叠。什么我需要做的,这样它涉及以下任一其他。

  FragmentTransaction T = getSupportFragmentManager()调用BeginTransaction();    FragmentTest myFragment =新FragmentTest();
    t.add(layout.getId(),myFragmentmyFirstFragment);    FragmentTest myFragment2 =新FragmentTest();
    t.add(layout.getId(),myFragment2mySecondFragment);    t.commit();

myFragment和myFragment2的意见//重叠,即使我已经设置了方向垂直。

 < RelativeLayout的
    机器人:ID =@ + ID / idll1
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =50dp
    机器人:layout_marginLeft =10SP
    机器人:layout_marginRight =0SP
    机器人:layout_marginTop =10SP
    机器人:layout_weight =1
    机器人:paddingBottom会=5DP
    机器人:paddingLeft =10dp
    机器人:paddingRight =5DP
    机器人:paddingTop =5DP
    机器人:方向=垂直/>


解决方案

我们可以按如下方式做到这一点:

Activity类中相对布局为present。让这种相对​​布局(mParentLayout)是活动的视图层次的根元素。
和该片段被添加到相对布局将在按钮(mGridBtn)下方的位置被mGridFragment

 公共类DroidOpsActivity扩展FragmentActivity工具
    OnClickListener {    私人的RelativeLayout mParentLayout = NULL;
    私人按钮mGridBtn = NULL;
    私人FragmentManager mFragmentMgr = NULL;
    私人FragmentTransaction mF​​ragmentTransc = NULL;
    私人片段mGridFragment = NULL;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        初始化();
    }    私人无效初始化(){
        的setContentView(R.layout.activity_droid_ops);
        mParentLayout =(RelativeLayout的)findViewById(R.id.parent_layout);
        mGridBtn =(按钮)findViewById(R.id.grid_button);
        mFragmentMgr = getSupportFragmentManager();
        registerListener();
    }    私人无效registerListener(){
        mGridBtn.setOnClickListener(本);
    }    @覆盖
    公共无效的onClick(视图v){
        开关(v.getId()){
        案例R.id.grid_button:
                    loadFragment();
                    mGridBtn.setEnabled(假);
        打破;
        }
    }    私人无效loadFragment(){
        mGridFragment =新DroidOpsFragments();
        mFragmentTransc = mFragmentMgr.beginTransaction();
        mFragmentTransc.add(mParentLayout.getId(),mGridFragment);
        mFragmentTransc.addToBackStack(NULL);
        mFragmentTransc.commit();
    }    公共RelativeLayout.LayoutParams fetchLayoutParams(){
        RelativeLayout.LayoutParams PARAMS =新RelativeLayout.LayoutParams(
                    LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);        //我们可以添加任何可用的规则的RelativeLayout,因此可以相应地定位
        params.addRule(RelativeLayout.BELOW,mGridBtn.getId());
        返回PARAMS;
    }
}

相应片段类,这是在活动的布局定位与

 公共类DroidOpsFragments扩展片段{    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
                    捆绑savedInstanceState){
        查看查看= inflater.inflate(R.layout.view_word_grid,NULL);        //这里我们从父活动在获取的LayoutParams并将其设置为片段的视图。        view.setLayoutParams(((DroidOpsActivity)活性).fetchLayoutParams());
        返回视图。
    }}

I have designed a RelativeLayout. I am trying to add fragment to it. It overlaps. What do I need to do so that it comes one below other.

    FragmentTransaction t = getSupportFragmentManager().beginTransaction();

    FragmentTest myFragment = new FragmentTest();
    t.add(layout.getId(), myFragment, "myFirstFragment");

    FragmentTest myFragment2 = new FragmentTest();
    t.add(layout.getId(), myFragment2, "mySecondFragment");

    t.commit();

//Views of myFragment and myFragment2 overlaps even though I have set the orientation to vertical.

<RelativeLayout
    android:id="@+id/idll1"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:layout_marginLeft="10sp"
    android:layout_marginRight="0sp"
    android:layout_marginTop="10sp"
    android:layout_weight="1"
    android:paddingBottom="5dp"
    android:paddingLeft="10dp"
    android:paddingRight="5dp"
    android:paddingTop="5dp" 
    android:orientation="vertical"/>

解决方案

We can do it as follows :

Activity class in which relative layout is present. Let that relative layout (mParentLayout) be root element of activity's view hierarchy. And the fragment to be added to the relative layout will be mGridFragment at a position below the Button (mGridBtn).

public class DroidOpsActivity extends FragmentActivity implements
    OnClickListener {

    private RelativeLayout mParentLayout = null;
    private Button mGridBtn = null;
    private FragmentManager mFragmentMgr = null;
    private FragmentTransaction mFragmentTransc = null;
    private Fragment mGridFragment = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initialize();
    }

    private void initialize() {
        setContentView(R.layout.activity_droid_ops);
        mParentLayout = (RelativeLayout) findViewById(R.id.parent_layout);
        mGridBtn = (Button) findViewById(R.id.grid_button);
        mFragmentMgr = getSupportFragmentManager();
        registerListener();
    }

    private void registerListener() {
        mGridBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.grid_button:
                    loadFragment();
                    mGridBtn.setEnabled(false);
        break;
        }
    }

    private void loadFragment() {
        mGridFragment = new DroidOpsFragments();
        mFragmentTransc = mFragmentMgr.beginTransaction();
        mFragmentTransc.add(mParentLayout.getId(), mGridFragment);
        mFragmentTransc.addToBackStack(null);
        mFragmentTransc.commit();
    }

    public RelativeLayout.LayoutParams fetchLayoutParams() {
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                    LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

        // We can add any rule available for RelativeLayout and hence can position accordingly
        params.addRule(RelativeLayout.BELOW, mGridBtn.getId());
        return params;
    }
}

Corresponding Fragment class which is to be positioned with in the activity's layout.

public class DroidOpsFragments extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.view_word_grid, null);

        // Here we are fetching the layoutParams from parent activity and setting it to the fragment's view.

        view.setLayoutParams(((DroidOpsActivity) activity).fetchLayoutParams());
        return view;
    }

}

这篇关于如何以编程方式添加片段的RelativeLayout的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆