精华内容
下载资源
问答
  • Fragment切换重新或不重新加载界面

    千次阅读 2016-05-06 19:04:28
    Fragment切换重新或不重新加载界面 在实现开发应用时,有时Fragment切换时界面的信息需要更新,则需要重新加载,否则不需要; 下面实现了默认的fragment不重新加载 与 重新加载的方法,只需你自己的fragmeng和 ...

    Fragment切换重新或不重新加载界面

    在实现开发应用时,有时Fragment切换时界面的信息需要更新,则需要重新加载,否则不需要;

    下面实现了默认的fragment 、 不重新加载 与 重新加载的方法,只需你自己的fragmeng和 放fragment的布局id;

    注:是import android.app.Fragment包的;

    如果想换成v4包的请注意其他的包类型统一,并修改:mFm = getSupportFragmentManager();

    /**
         * 设置默认的fragment,即//第一次加载界面;
         */
        private void setDefaultFragment(Fragment fm) {
            mFm = getFragmentManager();
            FragmentTransaction mFragmentTrans = mFm.beginTransaction();
    
            mFragmentTrans.add(R.id.id_addfram, fm).commit();
    
            mContent = fm;
        }
    
        private FragmentManager mFm;
        private Fragment mContent;
    
        /**
         * 修改显示的内容 不会重新加载 *
         */
        public void switchContent(Fragment to) {
            if (mContent != to) {
                FragmentTransaction transaction = mFm.beginTransaction();
                if (!to.isAdded()) { // 先判断是否被add过
                    transaction.hide(mContent).add(R.id.id_addfram, to).commit(); // 隐藏当前的fragment,add下一个到Activity中
                } else {
                    transaction.hide(mContent).show(to).commit(); // 隐藏当前的fragment,显示下一个
                }
                mContent = to;
            }
        }
    
        /**
         * 修改显示的内容 但会重新加载 *
         */
        public void switchContent2(Fragment to){
            FragmentTransaction transaction = mFm.beginTransaction();
            transaction.replace(R.id.id_addfram,to);
            //transaction.addToBackStack(null);
            transaction.commit();
        }



    展开全文
  • Android 关于fragment切换重新加载的解决方法

    千次下载 热门讨论 2015-12-31 16:04:40
    在项目中需要进行Fragment的切换,一直都是用replace()...那么如何让多个Fragment彼此切换时不重新实例化? 正确的切换方式是add(),切换时hide(),add()另一个Fragment,再次切换时,只需hide()当前,show()另一个。
  • 开发的时候,有时候Fragment的切换,是需要对原先的Fragment进行重新加载的...如果,不对fragment的数据进行重新加载的话,那么就用add来添加fragment,显示的时候用show,切换的时候用hide掉当前的,show切换的目标

    开发的时候,有时候Fragment的切换,是不需要对原先的Fragment进行重新加载的。而Fragment的界面是既可以进行重新加载,也可以不进行重新加载。

    每次重新加载的话,我们是使用的replace来进行fragment的替换的。

    如果,不对fragment的数据进行重新加载的话,那么就用add来添加fragment,显示的时候用show,切换的时候用hide掉当前的,show切换的目标。

    具体的实现代码如下:

    private FragmentManager fm;
    private FragmentTransaction ft;
    //之前显示的fragment
    public Fragment mContent, fragment_in, fragment_qm, fragment_se;
    //三个fragment
    fragment_in = new MakePlanFragment();
    fragment_qm = new CourseFragment();
    fragment_se = new MakePlanFragment();
    setDefaultFragment(fragment_in);
    设置默认的fragment的显示。没有切换的时候显示的fragment。

    public void setDefaultFragment(Fragment fragment) {
        fm = getFragmentManager();
        ft = fm.beginTransaction();
        ft.add(R.id.fragment_content, fragment).commit();
        mContent = fragment;
    }
    //切换fragment的显示隐藏
    public void switchContent(Fragment to) {
        if (mContent != to) {
            fm = getFragmentManager();
            ft = fm.beginTransaction();
            if (!to.isAdded()) {    // 先判断是否被add            ft.hide(mContent).add(R.id.fragment_content, to).commit(); // 隐藏当前的fragmentadd下一个到Activity        } else {
                ft.hide(mContent).show(to).commit(); // 隐藏当前的fragment,显示下一个
            }
            mContent = to;
        }
    }
    上面的这个switchContent的方法就是切换fragment的方法封装。在使用的地方,直接传入我们需要的目标fragment即可。如下:

    switchContent(fragment_in);
    传参为我们要切换的目标fragment。这样就实现了我们的切换fragment,但是不重新进行加载。


    如果要进行重新加载,关键代码如下:

    fm = getFragmentManager();
    ft = fm.beginTransaction();
    ft.replace(R.id.fragment_content, fragment_in);
    ft.commit();
    这就是重载与不重新加载的区别。理解了本质就简单多了。

    展开全文
  • Fragment切换重新与不重新加载界面

    千次阅读 2016-07-05 13:45:00
    Fragment切换重新或不重新加载界面 在实现开发应用时,有时Fragment切换时界面的信息需要更新,则需要重新加载,否则不需要; 下面实现了默认的fragment不重新加载 与 重新加载的方法,只需你自己的fragmeng和...


    Fragment切换重新或不重新加载界面

    在实现开发应用时,有时Fragment切换时界面的信息需要更新,则需要重新加载,否则不需要;

    下面实现了默认的fragment 、 不重新加载 与 重新加载的方法,只需你自己的fragmeng和 放fragment的布局id;

    注:是import android.app.Fragment包的;

    如果想换成v4包的请注意其他的包类型统一,并修改:mFm = getSupportFragmentManager();

    1. /** 
    2.      * 设置默认的fragment,即//第一次加载界面; 
    3.      */  
    4.     private void setDefaultFragment(Fragment fm) {  
    5.         mFm = getFragmentManager();  
    6.         FragmentTransaction mFragmentTrans = mFm.beginTransaction();  
    7.   
    8.         mFragmentTrans.add(R.id.id_addfram, fm).commit();  
    9.   
    10.         mContent = fm;  
    11.     }  
    12.   
    13.     private FragmentManager mFm;  
    14.     private Fragment mContent;  
    15.   
    16.     /** 
    17.      * 修改显示的内容 不会重新加载 * 
    18.      */  
    19.     public void switchContent(Fragment to) {  
    20.         if (mContent != to) {  
    21.             FragmentTransaction transaction = mFm.beginTransaction();  
    22.             if (!to.isAdded()) { // 先判断是否被add过  
    23.                 transaction.hide(mContent).add(R.id.id_addfram, to).commit(); // 隐藏当前的fragment,add下一个到Activity中  
    24.             } else {  
    25.                 transaction.hide(mContent).show(to).commit(); // 隐藏当前的fragment,显示下一个  
    26.             }  
    27.             mContent = to;  
    28.         }  
    29.     }  
    30.   
    31.     /** 
    32.      * 修改显示的内容 但会重新加载 * 
    33.      */  
    34.     public void switchContent2(Fragment to){  
    35.         FragmentTransaction transaction = mFm.beginTransaction();  
    36.         transaction.replace(R.id.id_addfram,to);  
    37.         //transaction.addToBackStack(null);  
    38.         transaction.commit();  
    39.     }
    展开全文
  • 切换Fragment导致fragment重新加载

    千次阅读 2016-10-25 14:20:05
    有多种方法,这里介绍两种,一种是在fragment里判断是否已经加载当前fragment,还有一种是在其 所属的Activity里进行判断。 首先介绍第一种://在onCreateView方法里,使用传参过来的view或自己写一个view都可以...

    虽然网上有很多文章都讲解了fragment切换改如何保存其状态,但是很多篇幅个人感觉不够详细,所以
    自己整理了一下。
    有多种方法,这里介绍两种,一种是在fragment里判断是否已经加载过当前fragment,还有一种是在其
    所属的Activity里进行判断。
    首先介绍第一种:

    //在onCreateView方法里,使用传参过来的view或自己写一个view都可以,我这里是自己写了一个
    if (view == null) {
                view = inflater.inflate(R.layout.fg_homepage, null);
    } 
    else  {
                ViewGroup parent = (ViewGroup) view.getParent();
                if (parent != null) {
                    parent.removeView(view);
                }
    }

    所谓fragment就是我们Activity中将布局,如FramLayout、LinearLayout等布局容器放入Activity布局里,将相应fragment放入容器里,这里我们使用FramLayout
    MainActivity 布局如下:

    <RelativeLayout 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">
    
        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="@string/hello_world" />
    
        <TextView
            android:id="@+id/tv2"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_toRightOf="@+id/tv"
            android:text="@string/hello_world" />
    
        <FrameLayout
            android:id="@+id/mFramLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/tv" />
    
    </RelativeLayout>

    两个fragment分别为(PS: fragment1里面放入了ListView,这样方便我们看到切换后状态报错的效果)
    fragment1.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" >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="fragmentOne" />
    
        <ListView
            android:id="@+id/mListview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </ListView>
    
    </LinearLayout>

    fragment2.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" >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="fragmentTwo" />
    
    </LinearLayout>

    ListView的适配器布局item_textview.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" >
    
        <TextView
            android:id="@+id/item_textview"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:text="@string/hello_world" />
    
    </LinearLayout>

    两个Fragment类(过于简单,实在不是想贴出来的~~~)
    FragmentOne

    public class FragmentOne extends Fragment {
        View view;
        private ListView mListview;
        private mAdapter mTestAdapter;
        private List<String> lists;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            if (view == null) {
                view = inflater.inflate(R.layout.fragment1, null);
                mListview = (ListView) view.findViewById(R.id.mListview);
    
            }
            initView();
    
            return view;
    
        }
    
        private void initView() {
            getData();
            mTestAdapter = new mAdapter(lists, getActivity());
            mListview.setAdapter(mTestAdapter);
        }
    
        private void getData() {
            lists = new ArrayList<String>();
            for (int i = 0; i < 50; i++) {
                lists.add("test");
            }
    
        }
    
    }
    

    FragmentTwo

        public class FragmentTwo extends Fragment {
        View view;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            if (view == null) {
                view = inflater.inflate(R.layout.fragment2, null);
    
            }
    
            return view;
    
        }
    
    }
    

    还有一个adapter。。。。。

    package com.lee.testfragmentadd;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ListView;
    
    public class FragmentOne extends Fragment {
        View view;
        private ListView mListview;
        private mAdapter mTestAdapter;
        private List<String> lists;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            if (view == null) {
                view = inflater.inflate(R.layout.fragment1, null);
                mListview = (ListView) view.findViewById(R.id.mListview);
    
            }
            initView();
    
            return view;
    
        }
    
        private void initView() {
            getData();
            mTestAdapter = new mAdapter(lists, getActivity());
            mListview.setAdapter(mTestAdapter);
        }
    
        private void getData() {
            lists = new ArrayList<String>();
            for (int i = 0; i < 50; i++) {
                lists.add("test");
            }
    
        }
    
    }
    

    最后是我们的主要代码,MainActivity(PS:这里的Fragment之类的东西使用的时V4包,如果想使用新包可自行导入替换)。

    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentTransaction;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.FrameLayout;
    import android.widget.TextView;
    
    public class MainActivity extends FragmentActivity implements OnClickListener {
    
        private TextView tv, tv2;
        private FrameLayout mFramLayout;
        private FragmentOne fragmentOne;
        private FragmentTwo fragmentTwo;
        private Fragment mFragment;
        FragmentTransaction fTransaction = getSupportFragmentManager().beginTransaction();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // 初始化控件
            initView();
            // 实例化两个fragment
            fragmentOne = new FragmentOne();
            fragmentTwo = new FragmentTwo();
    
            // 先获取FragmentManager,将activity_main.xml布局里的FramLayout放入fragment管理器内并提交
            getSupportFragmentManager().beginTransaction().add(R.id.mFramLayout, fragmentOne).commit();
            getSupportFragmentManager().beginTransaction().add(R.id.mFramLayout, fragmentTwo).commit();
    
            // 初始化点击事件
            initListener();
        }
    
        private void initListener() {
            tv.setOnClickListener(this);
            tv2.setOnClickListener(this);
        }
    
        private void initView() {
            tv = (TextView) findViewById(R.id.tv);
            tv2 = (TextView) findViewById(R.id.tv2);
    
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.tv:
                // 当用户点击后将其它Fragment隐藏,hide(fragment.class),显示当前点击对应的fragment,show(fragment.class)
                // 并且commit
                getSupportFragmentManager().beginTransaction().hide(fragmentTwo).show(fragmentOne).commit();
                // 这里时为了防止用户点击多次当前选项卡,导致每次都调用getSupportFragmentManager().beginTransaction()方法
                // 所以,如果改选项卡不需要切换时,使其不可点击
                tv.setOnClickListener(null);
                tv2.setOnClickListener(this);
                Log.e("FUCK", "tv");
                break;
    
            case R.id.tv2:
                // 同上
                getSupportFragmentManager().beginTransaction().hide(fragmentOne).show(fragmentTwo).commit();
                // 同上
                tv2.setOnClickListener(null);
                tv.setOnClickListener(this);
                Log.e("FUCK", "tv2");
                break;
    
            default:
                break;
            }
    
        }
    
    }

    总之,就是通过将fragment添加进fragmentmanager内,然后通过hide与show方法来隐藏与显示对应的
    fragment。这里值得注意的是,getSupportFragmentManager().beginTransaction()是一个即时的获取当
    前fragment管理器操作的对象,同Bean一样,不要直接定义一个FragmentTransaction fTransaction=
    getSupportFragmentManager().beginTransaction()
    代码注释已经讲得很清楚了,就不上传源项目了

    展开全文
  • 在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment ...那么如何让多个Fragment彼此切换时不重新实例化? 正确的切换方式是add(),切换时hide(),add()另一个Fragment,再次切换时,只需h
  • Fragment 没有重新加载导致异常

    千次阅读 2014-09-19 15:57:06
    不过我碰到了一个问题,即当 Fragment 对应的数据集发生改变时,我希望能够通过调用 mAdapter.notifyDataSetChanged() 来触发 Fragment 页面使用新的数据调整或重新生成其内容,可是当我调用 notifyDataSetChange
  • 前言:如果fragment的懒加载则每次进入activity就会初始化没必要的数据,消耗内存和网络流量,再每次自动销毁后也需要重新初始化fragment的数据,为此优化,我们要做fragment的懒加载,网络上关于懒加载的文章...
  • Viewpager+Fragment中的子页面,,我想重新刷新当前页面的数据,,,有什么方法可以刷新,,,页面里有个刷新方法,需要执行getActivity(),,但是如果Fragment不重新执行的滑,,getActivity()就报空指针~~!! 是不是要重新执行...
  • mViewPager .setOffscreenPageLimit(categoryList.size()) ...在VPAdapter中初始化item,由ViewPager.OnPageChangeListener每次只初始化当前fragment,而加载过的fragment再次选中不会重新加载
  • 直通车:完美解决Fragment重叠本篇博客我们来说一下怎么让fragment重新加载布局资源文件。以及要注意的问题。首先来说一下为什么有这个需求。比如,我有这么一个页面,如下图该页面要填写一大堆数据,然后点击提交会...
  • 在项目中需要进行Fragment的切换,一直都是用replace()方法来替换Fragment ...那么如何让多个Fragment彼此切换时不重新实例化? 正确的切换方式是add(),切换时hide(),add()另一个Fragment,再次切换时,只需h
  • ViewPager+Fragment不加载页面

    千次阅读 2014-11-11 11:40:12
    实现类似网易新闻客户端,ViewPager每次只加载当前
  • 上面两个页面都是 ViewPager + Fragment实现,Viewpager + Fragment情况下,fragment的生命周期因Viewpager的缓存机制而失去了...使用Fragment类自带方法setUserVisibleHint()判断当前fragment是否对用户可见,根据..
  • Fragment的懒加载

    2018-07-25 09:24:48
    对于这个问题,我认为最好的方式就是有一个BaseFragment,在该Fragment里实现了懒加载的逻辑,当有Fragment需要使用懒加载时,则继承该BaseFragment并实现定义好的方法即可。笔者使用的Fragment来自==import android...
  • 本人小菜鸟一枚, 并且... fragment的懒加载,顾名思义,就是在用到这个fragment的时候才把它的内容加载出来.这样可以防止一次同时加载大量不必要的资源,减少流量的消耗,在一定程度上提高我们APP的运行效率.
  • 相关博客: http://blog.csdn.net/yuzhiqiang_1993/article/details/76152454 http://blog.csdn.net/yuzhiqiang_1993/article/details/75014591 清除fragment页面数据 fragment手动重新加载布局 解决fragment重叠
  • package fragment; import android.support.v4.app.Fragment; import android.view.View; /** * Created by xiaobai on 2018/1/31/031. */ public abstract class BaseFragment extends Fragment { /
  • FragmentViewpager与Fragment实现懒加载

    千次阅读 2016-08-29 20:19:56
    FragmentViewpager懒加载
  • fragment实时加载

    2016-03-31 17:03:20
    实现fragment延迟加载,ViewPager+fragment延迟加载
  • 最近的一个项目用到了viewpager加fragment,但是来回滑动的时候会出现重新联网加载的现象,仔细研究了发现其中的原因,在这里分享一下。 起初比较迷惑,让后就在fragment的生命周期中挨个log了一下最后发现在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,640
精华内容 12,656
关键字:

当前fragment不重新加载