切换fragment

demo源码下载:http://download.csdn.net/detail/u010778159/8643203

fragment间的切换

  1. 工程有3个.java文件,4个xml文件

我们要实现的是:fragment_content2中有一个Button,而fragment

_content1中有一个TextView, 一开始MainActivity.java显示fragment_content2的内容,当点击Button之后,切换成fragment_content1的内容。

fragment_content1.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/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30dp"
        android:layout_gravity="center"
        android:text="这是fragment1" />

</LinearLayout>

fragment_content2.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" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="这是fragment2" />

</LinearLayout>

activity_main.xml:

<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" >

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.LZP.fragmenttest.MainActivity"
        tools:ignore="MergeRootFrame" >
    </FrameLayout>

</RelativeLayout>

可以看到activity_main.xml中有一个FrameLayout,这个就是fragment的容器

ContentFragment.java:

package com.LZP.fragment_change;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class ContentFragment extends Fragment {
    private Button send2;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.fragment_content1, container, false);  

        return view;
    }
}

ContentFragment2.java:

package com.LZP.fragment_change;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class ContentFragment2 extends Fragment {
    private Button button;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.fragment_content2, container, false);
        button=(Button)view.findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
            //按钮点击响应事件
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                FragmentManager fm = getActivity().getSupportFragmentManager();
                ContentFragment fragment=new ContentFragment();
                android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
                //container是activity_main.xml中的FrameLayout的ID,用来放置Fragment
                ft.replace(R.id.container, fragment);
                ft.commit();
            }
        });
        return view;
    }
}

MainActivity.java:

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentManager fm = getSupportFragmentManager();
        ContentFragment2 fragment=new ContentFragment2();

        android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
        ft.add(R.id.container, fragment);
        ft.commit();

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }
    }
时间: 2024-11-07 10:10:35

切换fragment的相关文章

FragmentTab切换Fragment时避免重复加载UI

原文地址:破晓博客 ? [原创]FragmentTab切换Fragment时避免重复加载UI 使用FragmentTa时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 测试于:Android2.3+ 解决办法:在Fragment onCreateView方法中缓存View private View rootView = null;// 缓存Fragment view @Override public

FragmentTabHost切换Fragment时避免重复加载UI

使用FragmentTabHost时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决办法:在Fragment onCreateView方法中缓存View 1 private View rootView;//缓存Fragment view 2 3 @Override 4 public View onCreateView(LayoutInflater inflater, ViewGroup conta

切换Fragment时实现数据保持

摘要 Fragment设计初衷是为了简化不同屏幕分辨率的开发难度,他将代表一个功能的UI及其相关数据看做一个模块,以便达到复用.可以将Fragment看作是一个可以嵌入布局中的activity,有自己的生命周期. Fragment设计初衷是为了简化不同屏幕分辨率的开发难度,他将代表一个功能的UI及其相关数据看做一个模块,以便达到复用.可以将Fragment看作是一个可以嵌入布局中的activity,有自己的生命周期.比如我现在在手机上有activityA和activityB,但是在平板上有更大的

解决 viewpager fragment 切换 Fragment被销毁的问题

当我们用FragmentViewPagerAdapter和ViewPager来完成滑动切换选项卡时,效果非常不错,但是后来遇到一个问题,FragmentA切换到FragmentB,再滑到FragmentC时,FragmentA的状态数据已经不予保存了,再次滑动到FragmentB时,FragmentA的oncreateView方法会重新调用,如果有网络请求,将会是非常蛋疼,在网上找了半天,最后看到viewpager中有个这样的方法setOffscreenPageLimit,设置为2,然后再一试,

使用ViewPager切换Fragment时,防止频繁调用OnCreatView

使用ViewPager切换Fragment,我原先使用系统自带的适配器FragmentPagerAdapter. 切换fragment时,频繁调用oncreatview(). 查看FragmentPagerAdapter的源码,发现两个关键的地方 1 @Override 2 public Object instantiateItem(ViewGroup container, int position) { 3 if (mCurTransaction == null) { 4 mCurTransa

在Fragment中嵌套使用viewpagerindicator切换Fragment返回后出现空白页与FragmentPagerAdapter页面预加载的解决方案

1. 在Fragment中嵌套使用viewpagerindicator切换Fragment返回后出现空白页 先上代码: 1 mAdapter = new OrderAdapter(getChildFragmentManager()); 2 ViewPager pager = (ViewPager) v.findViewById(R.id.pager); 3 pager.setAdapter(mAdapter); 4 5 TabPageIndicator indicator = (TabPageI

FragmentTabHost切换Fragment时避免重复加载UI,导致切换后重绘页面的问题解决

项目中用到了FragmentTabHost,痛苦的是切换Fragment时页面总是重新加载无法保证是切换前的状态,现在得以解决! 问题:使用FragmentTabHost时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决办法:在Fragment onCreateView方法中缓存View @Override public View onCreateView(LayoutInflater infla

(转载)解决切换Fragment时布局重新实例化

解决切换Fragment时布局重新实例化 作者 instanceof 关注 2015.12.30 17:25* 字数 628 阅读 7616评论 17喜欢 23 关于Fragment 在这简单说一下Fragment,Fragment是Android 3.0以后才出现的,是为了适应不同的手机屏幕.平板和电视机的屏幕的.另外还有一个重要的原因,因为Activity的创建到销毁需要费时费内存,大量的Activity之间的跳转会造成堆栈饱满,引发程序崩溃或者无响应.为了解决这个问题,Fragment就产

底边栏Tab切换Fragment,带角标显示效果

类似于手机版qq的底边栏Tab效果有很多种实现方法,比如TabActivity.自定义RadioGroup等.由于高版本下TabActivity已经被废弃,而且Activity比较重量级,所以一般不使用TabActivity.这里分享一种我写的自定义底部Tab的方法,顺带加上底部标签的角标显示效果.效果如下: 关于Demo需要交代几点: 1.这个Demo中并没有对尺寸做适配,在不同机型的手机上运行需要调整代码中的尺寸相关代码. 2.角标效果只是个演示效果,逻辑可能并不合理,具体显示或者改变.隐藏

顶部标题TabLayout点击切换Fragment

顶部标题TabLayout点击切换Fragment 加依赖: 在开始之前先调用工具插件:右键工程>Open Module Settings>Dependencies>+>Library Dependency>导人(com.android.support:design:27.0.2)>ok implementation 'com.android.support:design:27.0.2' =========================================