精华内容
下载资源
问答
  • 为了不弄混淆:暂且把Activity中嵌入Fragment叫做Fragment1,Fragment2。嵌入Fragment1中的FragmentFragment11遇到问题: 打开软件时,显示Fragment1,切换到Fragment2,再切换回Fragment1时报错。报错信息...

    为了不弄混淆:暂且把Activity中嵌入的Fragment叫做Fragment1,Fragment2。嵌入在Fragment1中的Fragment叫Fragment11

    遇到问题:
    打开软件时,显示Fragment1,切换到Fragment2,再切换回Fragment1时报错。

    报错信息如下:

    W/System.err(20601): android.view.InflateException: Binary XML file line #10: Error inflating class fragment
    W/System.err(20601):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
    W/System.err(20601):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
    W/System.err(20601):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
    W/System.err(20601):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
    W/System.err(20601):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    W/System.err(20601):    at com.sdlj.vehiclerepair.fragment.HomeFragment.onCreateView(HomeFragment.java:75)
    W/System.err(20601):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2239)
    W/System.err(20601):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1332)
    W/System.err(20601):    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1574)
    W/System.err(20601):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1641)
    W/System.err(20601):    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:794)
    W/System.err(20601):    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2415)
    W/System.err(20601):    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2200)
    W/System.err(20601):    at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2153)
    W/System.err(20601):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2063)
    W/System.err(20601):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:725)
    W/System.err(20601):    at android.os.Handler.handleCallback(Handler.java:800)
    W/System.err(20601):    at android.os.Handler.dispatchMessage(Handler.java:100)
    W/System.err(20601):    at android.os.Looper.loop(Looper.java:194)
    W/System.err(20601):    at android.app.ActivityThread.main(ActivityThread.java:5398)
    W/System.err(20601):    at java.lang.reflect.Method.invokeNative(Native Method)
    W/System.err(20601):    at java.lang.reflect.Method.invoke(Method.java:525)
    W/System.err(20601):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:836)
    W/System.err(20601):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:603)
    W/System.err(20601):    at dalvik.system.NativeStart.main(Native Method)
    W/System.err(20601): Caused by: java.lang.IllegalArgumentException: Binary XML file line #10: Duplicate id 0x7f0c0092, tag null, or parent id 0xffffffff with another fragment for com.sdlj.vehiclerepair.view.CycleViewPager
    W/System.err(20601):    at android.app.Activity.onCreateView(Activity.java:4786)
    W/System.err(20601):    at android.support.v4.app.BaseFragmentActivityApi14.onCreateView(BaseFragmentActivityApi14.java:41)
    W/System.err(20601):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:75)
    W/System.err(20601):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
    W/System.err(20601):    ... 24 more

    解决方案:

    1.在Fragment1中将View定义为静态,判断是否为空。这种方法虽然能解决问题,但是有内存泄露

    private static View view;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (view != null) {
            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null)
                parent.removeView(view);
        }
        try {
            view = inflater.inflate(R.layout.map, container, false);
        } catch (InflateException e) {
            /* map is already there, just return view as it is */
        }
        return view;
    }

    2.在Fragment1的onDestroyView中将Fragment11手动删除,再进入的时候再重新加载。

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Fragment11 f = (Fragment11) getActivity().getFragmentManager()
                                             .findFragmentById(R.id.map);
        if (f != null) 
            getActivity().getFragmentManager().beginTransaction().remove(f).commit();
    }

    更详细的解释请见:https://stackoverflow.com/questions/14083950/duplicate-id-tag-null-or-parent-id-with-another-fragment-for-com-google-androi

    展开全文
  • 主页面嵌入Fragment

    2020-06-08 17:21:20
    从而可以更加方便的在 运行过程中动态地更新Activity的用户界面,另外Fragment并不能单独使用,他需要嵌套在Activity 中使用,尽管他拥有自己的生命周期,但是还是会受到宿主Activity的生命周期的影响,比如Acti
    开发工具与关键技术:Android Studio
    作者:邹铭霞
    撰写时间:2020年6月08日
    

    Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段/碎片。使用Fragment 我们可以把屏幕划分成几块,然后进行分组,进行一个模块化的管理。从而可以更加方便的在 运行过程中动态地更新Activity的用户界面,另外Fragment并不能单独使用,他需要嵌套在Activity 中使用,尽管他拥有自己的生命周期,但是还是会受到宿主Activity的生命周期的影响,比如Activity 被destory销毁了,他也会跟着销毁。

    XML

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:orientation="vertical">
        <!--子页面的容器-->
        <LinearLayout
            android:id="@+id/ll_main_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical" />
        <!--底部切换按钮-->
        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/bg_layout_border_top"
            android:paddingTop="10dp"
            android:orientation="horizontal">
            <!--主页-->
            <RadioButton
                android:id="@+id/rb_main_home"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:button="@null"
                android:drawableTop="@drawable/selector_main_rb_home"
                android:gravity="center"
                android:text="主页"
                android:textAlignment="center"
                android:textColor="@drawable/selector_main_rb_text" />
            <!--订单-->
            <RadioButton
                android:id="@+id/rb_main_order"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:button="@null"
                android:drawableTop="@drawable/selector_main_rb_order"
                android:textColor="@drawable/selector_main_rb_text"
                android:textAlignment="center"
                android:gravity="center"
                android:text="订单"/>
            <!--我的-->
            <RadioButton
                android:id="@+id/rb_main_user"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:button="@null"
                android:drawableTop="@drawable/selector_main_rb_user"
                android:textColor="@drawable/selector_main_rb_text"
                android:textAlignment="center"
                android:gravity="center"
                android:text="我的"/>
        </RadioGroup>
    </LinearLayout>
    
    public class MainActivity extends AppCompatActivity {
        private Fragment[] fragments=new Fragment[]{null,null,null};//存放Fragment
        //获取控件
        private LinearLayout llContent;//内容容器
        private RadioButton rbHome;//rb 主页
        private RadioButton rbOrder;//rb 订单
        private RadioButton rbUser;//rb 用户
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // 隐藏标题栏
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            // 隐藏状态栏
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.activity_main);
            //获取控件
            llContent = findViewById(R.id.ll_main_content);
            rbHome = findViewById(R.id.rb_main_home);
            rbOrder = findViewById(R.id.rb_main_order);
            rbUser = findViewById(R.id.rb_main_user);
            //页面初始化方法
            initView();
            //设置控件点击事件
            setViewEventListener();
        }
        private void initView() {
            //设置默认选择页面
            rbHome.setChecked(true);
            switchFragment(0);//默认显示HomeFragment
        }
        //设置控件点击事件
        private void setViewEventListener(){
            rbHome.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {switchFragment(0);//0 - HomeFragment}});
            rbOrder.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) switchFragment(1);//1 - OrderFragment}});
            //UserFragment
            rbUser.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {switchFragment(2);//2 - UserFragment}});
        }
    
        //方法 - 切换Fragment
        private void switchFragment(int fragmentIndex){
            //在Activity中显示Fragment
            //1、获取Fragment的管理器 FragmentManager
            FragmentManager fragmentManager=this.getSupportFragmentManager();
            //2、开启Fragment事务
            FragmentTransaction transaction=fragmentManager.beginTransaction();
            //懒加载 - 如果需要显示的Fragment为null,就new。并添加到Fragment事务中
            if(fragments[fragmentIndex]==null){
                switch (fragmentIndex){
                    case 0://home
                        fragments[fragmentIndex]=new HomeFragment();
                        break;
                    case 1://order
                        fragments[fragmentIndex]=new OrderFragment();
                        break;
                    case 2://user
                        fragments[fragmentIndex]=new UserFragment();
                        break;
                }
                //3、添加Fragment对象到Fragment事务中
                transaction.add(R.id.ll_main_content,fragments[fragmentIndex]);
            }
            //隐藏其他的Fragment
            for (int i=0;i<fragments.length;i++){
                if (fragmentIndex!=i && fragments[i]!=null){
                    //隐藏指定的Fragment
                    transaction.hide(fragments[i]);
                }
            }
    		//4、显示Fragment
            transaction.show(fragments[fragmentIndex]);
            //5、提交事务
            transaction.commit();
        }
    }
    

    效果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • Android百日程序:嵌入Fragment

    千次阅读 2014-12-17 13:41:10
    Fragment相当于一个小型activity,因为Fragment可以实现activity中所有的功能,不同的是Fragment可以嵌入activity,一个...本章来看看如何在activity中嵌入Fragment的方法,有静态和动态方法的。 静态方法就是使用x

    Fragment相当于一个小型activity,因为Fragment可以实现activity中所有的功能,不同的是Fragment可以嵌入activity,一个activity可以有多个Fragment,而且可以运行时根据需要切换Fragment,达到可以适应不同屏幕大小等目的需要。


    本章来看看如何在activity中嵌入Fragment的方法,有静态和动态方法的。

    静态方法就是使用xml直接嵌入,动态就是在Java代码中嵌入。


    方法:

    1 按照默认设置新建项目

    2 新建一个类命名为Fragment1.java

    代码如下:

    package bill.su.fragment;
    
    import android.app.Fragment;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class Fragment1 extends Fragment {
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
    		return inflater.inflate(R.layout.fragment1, container, false);			
    	}
    }
    
    3 新建layout的xml文件,输入代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="#00FF00" >
        
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/fragment_one"
            android:textSize="25sp"
            android:textColor="#FF0000" />
    
    </LinearLayout>
    

    4 同理新建第二个类:

    package bill.su.fragment;
    
    import android.app.Fragment;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class Fragment2 extends Fragment {
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
    		return inflater.inflate(R.layout.fragment2, container, false);
    	}
    }
    

    5 新建第二个类的对应layout的xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="#FFFE00" >
        
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/fragment_two"
            android:textColor="#000000"
            android:textSize="25sp" />    
    
    </LinearLayout>
    

    6 只需要在主activity的xml文件中直接嵌入Fragment就可以了:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="bill.su.fragment.MainActivity"
        android:orientation="horizontal" >
    
        <fragment
            android:name="bill.su.fragment.Fragment1"
            android:id="@+id/fragment1"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_width="0dp" />
       
        <fragment
            android:name="bill.su.fragment.Fragment2"
            android:id="@+id/fragment2"
            android:layout_weight="1"
            android:layout_width="0sp"
            android:layout_height="match_parent" />
    
    </LinearLayout>
    

    运行得到如下效果:



    这样同一个activity中嵌入了两个不同的Fragment了。

    这样基本上不用写Java代码。


    如果在activity的Java代码中实现的话,就只需要修改onCreate函数就可以:

    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		FragmentManager fragManager = getFragmentManager();
    		FragmentTransaction fragTrans = fragManager.beginTransaction();
    
    		// get the current display info
    		WindowManager wm = getWindowManager();
    		Display d = wm.getDefaultDisplay();
    		if (d.getWidth() < d.getHeight()) {
    			Fragment1 frag1 = new Fragment1();
    			fragTrans.replace(android.R.id.content, frag1);
    		}
    		else {
    			Fragment2 frag2 = new Fragment2();
    			fragTrans.replace(android.R.id.content, frag2);
    		}
    		fragTrans.commit();
    	}

    知识点:

    使用FragmentManager和FragmentTransaction两个类实现动态载入Fragment。

    其中的WindowManager是为了得到当前屏幕的长和宽,判断是横屏韩式竖屏,并根据这判断载入不同的Fragment,得到不同的效果。

    最后一句FragTrans.commit()是必须的,这样才能使得Fragment载入成功。


    到达一定境界了,这些全部都成为很容易很简单的东西了,学一些新知识点并不难,难是在于记忆,更难的是在于灵活运用,还有更加更加难的是如何运用这些知识创造价值,最难的是创造别人无法创造的价值。



    展开全文
  • 在Activity里面填充界面,可以直接把界面内容写在Activity里面,这不是最好的,有的时候为了模块化会选择下面的方式可以再在Activity里面填充一个Fragment(就是把fragment填充到Activity里面)!! public class...

      在Activity里面填充界面,可以直接把界面内容写在Activity里面,这不是最好的,有的时候为了模块化会选择下面的方式
    可以再在Activity里面填充一个Fragment(就是把fragment填充到Activity里面)!!

    public class ConversionCenterActivity extends BaseFragmentActivity implements Constant{
        
        private ConversionCenterFragment mConversionCenterFragment;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_conversion_center);
            mConversionCenterFragment=new ConversionCenterFragment();
            getSupportFragmentManager().beginTransaction().replace(R.id.center_layout, mConversionCenterFragment).commit();
        }
    
    }

     

    转载于:https://www.cnblogs.com/jss4j/p/4460802.html

    展开全文
  • R.layout.fragment_collection_object, container, false); Bundle args = getArguments(); ((TextView) rootView.findViewById(android.R.id.text1)).setText( Integer.toString(args.getInt(ARG_OBJECT))); ...
  • setContentView(R.layout.activity_main); } } ``` 然后在主布局activity_main中只有一个fragment ``` <fragment android:id="@+id/title_fragment" android:layout_width="wrap_content" ...
  • 本文讲述RecyclerView使用时setAdapter无效问题,而问题本质是Fragment控件获取方式不当造成的。本分分析了根本原因,也给出了解决方案。
  • Fragment

    2015-12-05 21:27:54
    fragment是一种可以嵌入在activity中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间。可以把fragment理解成一种迷你的activity。Fragment的简单用法(静态加载Fragment):1.先创建一个layout布局文件 2....
  • Fragment 概念 Android从3.0之后引入了Fragment,可以把它理解为页面的一个片段,比如一个html网页就包含一个header头部片段,以及一个body身体片段。 设计Fragment的目的是让页面布局更加灵活,不但可以随意...
  • 布局文件代码: ``` android:id="@+id/myWeb" android:layout_width="match_parent" android:layout_height="match_...例如想要在Fragment嵌入baidu网页,应该如何实现?希望能够提供一下完整一点的代码。
  • 原来问题是出现于viewpager在这里的layout_height不能设置为"wrap_content" 之前我遇到空白的问题,我还以为是管理的问题 所以我提取出来做了demo去看 还有是网上找了demo对照,终于发现问题了 然后整个过程,...
  • Fragment是用于嵌入到活动中的UI片段,和Java里的Jpanel类似。 一般来说,活动都可以实现Fragment的内容,那为什么还需要Fragment呢? 原因主要有: Fragment可以提高代码的复用性 Fragment之间切换速度比活动快 ...
  • layout_gravity和gravity的理解: 对UI进行布局的使用,会使用到layout_gravity和gravity这两个属性,说下我的理解: android:gravity: 设置该布局容器内各子组件的对齐方式,比如button内的text文本的对齐方式。...
  • fragment

    2013-12-11 16:13:45
    Fragment代表了Activity的一种行为或者界面的一部分,可以让单一的Activity变的复杂化。...Fragment总是嵌入在Activity里面,并且它的生命周期跟Activity联系在一起。比如,当Activity暂停,内部的Fragment
  • Fragment嵌套Fragment

    千次阅读 2019-04-01 12:57:45
    问题1、fragment嵌套fragment不显示问题 通常时候,我们制作底部Tab切换,会用到fragment。即一个Activity下,使用4种fragment。这次遇到的问题是关于fragment再次嵌套fragmen的问题,功能需要在其中一个fragment中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,824
精华内容 1,529
关键字:

layout嵌入fragment