-
2021-10-20 15:26:53
OneFragment.java
package com.example.myapplication; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.fragment.app.Fragment; public class OneFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_one,container,false); return view; } }
TwoFragment.java
package com.example.myapplication; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.fragment.app.Fragment; public class TwoFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.frament_two,container,false); return view; } }
MainActivity.java
package com.example.myapplication; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import java.util.Scanner; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button one,two; String [] HighLetter = {"A"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); one = findViewById(R.id.one); two = findViewById(R.id.two); one.setOnClickListener(this); two.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.one: replaceFragment(new OneFragment()); break; case R.id.two: replaceFragment(new TwoFragment()); break; default: break; } } public void replaceFragment(Fragment fragment) { FragmentManager supportFragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.frgment,fragment); fragmentTransaction.commit(); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/frgment" android:layout_height="wrap_content" android:orientation="vertical" android:layout_width="match_parent" android:layout_weight="17"> </LinearLayout> <Button android:id="@+id/one" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="One" /> <Button android:id="@+id/two" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Two" /> </LinearLayout>
fragment_one.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/fr_two" android:text="one_fragment" android:layout_width="match_parent" android:layout_height="match_parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
fragment_two.xml
package com.example.myapplication; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.fragment.app.Fragment; public class TwoFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.frament_two,container,false); return view; } }
更多相关内容 -
Activity之间以及fragment之间跳转 共享元素动画实现
2017-08-30 17:52:05实现Activity 之间以及 fragment 之间 共享元素 平滑动画过渡跳转,实现界面跳转动画 -
kotlin开发中,如何做到导航子标签跳转?Fragment的多种跳转
2021-01-03 20:19:46今天在写导航栏子页面跳转时候死活无法跳转,错误类型如图: 那么原因是我使用了 Intent 跳转页面,也就是 : override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated... -
Android Activity与Fragment之间的跳转实例详解
2020-08-31 12:41:24主要介绍了Android Activity与Fragment之间的跳转实例详解的相关资料,需要的朋友可以参考下 -
android+Fragment实现页面的局部跳转
2013-03-05 17:05:36android平板电脑开发,使用Fragment实现页面的局部跳转,像管理系统一样,点击左边的连接实现右边页面的跳转 -
Android从Fragment跳转到其他Activity的简单实例
2021-01-03 13:36:01为了实现从Fragment跳转到其他Activity,下面需要创建以下文件: 第一步:简单编写布局文件fragment_activity.xml和抽象类TemplateFragmentActivity.java代码如下: fragment_activity.xml <?xml version=1.0 ... -
Android通过按钮实现Fragment之间的跳转,代码可以运行.zip
2019-07-26 16:31:28Android通过按钮实现Fragment之间的跳转,代码可以运行.zip -
Fragment跳转时传递参数及结果回传的方法(推荐)
2020-08-31 18:07:58今天总结一下Fragment间的参数传递及结果返回的方法,非常不错,具有参考借鉴价值,需要的朋友参考下 -
Android开发学习------实现fragment跳转
2022-01-21 21:50:47在大多数的应用设计中,我们需要实现界面的跳转,如桌面应用程序不同窗体间的跳转、web应用程序不同jsp间的跳转等等,而Android应用的界面跳转,一般是fragment跳转,并不像web应用程序一样简简单单地写个servlet...在大多数的应用设计中,我们需要实现界面的跳转,如桌面应用程序不同窗体间的跳转、web应用程序不同jsp间的跳转等等,而Android应用的界面跳转,一般是fragment跳转,并不像web应用程序一样简简单单地写个servlet请求就完事,其具体流程稍显复杂:
大体思路
一般我们的fragment会处于一个activity中,而我们需要跳转到另一个fragment,那么就可以另外创一个activity,比如我做的用户界面,我创了个UserActivity,要在我们已经有的用户个人界面跳转到一个界面(比如是编辑资料),就先从当前的fragment所在的activity跳转到另一个activity,再由另一个activity控制要跳转去的fragment。
具体实现
以个人的一个项目为例:
比如我这里就是底部导航栏中“用户”板块显示的内容,它是在fragment_forth里面,而这个文件和ForthFragment绑定,也就是说这一部分目前属于ForthFragment,而这个fragment属于MainActivity,但是我想让它点击“编辑资料”后跳转到另一个不属于MainActivity的fragment(如果都放到MainActivity,会很冗杂),那么就在相应的鼠标点击事件里面通过intent先让它跳转到另一个叫做UserActivity的地方(还可以带参数,刚好方便我们设定要UserActivity去哪个界面,我这里跳转到edit界面需要的参数是0)
,然后在UserActivity重写onResume方法(什么是onResume方法以及有什么用可以自行CSDN),在这个方法里面通过FragmentTransaction和获取到的id去判断,
,在这里后面需要用到replace方法(表示替代),比如我的activity_user(这时候应用已经从开始我们那个大的activity_main跳转到activity_user了,我所有的用户操作界面都在activity_user中展示),而我的activity_user实际上只有一个viewPager
,它的用处就是在UserActivity中判定完id值并做相应的实例化处理后(这个实例化处理也有讲究,后面说),作为replace方法的第一个参数,表示要被替代掉的部分(也就是最开始啥也没有的显示部分),第二个参数放我们实例化了的fragment,就可以实现跳转效果了(最后别忘了commit,以及onResume方法必须要调用父类方法即“super.onResume()")关于上面提到的”实例化“:
还可以看到我这里的fragment实例化是用的相应的类内部设定的一个static方法,这个方法的特殊之处就是可以设定参数(我这里都还只有id一个参数,可以加),这个方法看上去和构造函数有点像,但它主要和intent一起使用,在activity之间传值,但如果使用构造函数传值,在应用程序的横竖状态改变(比如从竖屏变为横屏),应用程序会自动重新加载该界面,从而导致之前的fragment构造方法中的参数丢失(默认使用无参构造),因此使用可以长期保存的bundle进行传值是更为推荐的 -
Android开发使用Activity嵌套多个Fragment实现横竖屏切换功能的方法
2021-01-04 18:43:51本文实例讲述了Android开发使用Activity嵌套多个Fragment实现横竖屏切换功能的方法。分享给大家供大家参考,具体如下: 一、上图 二、需求 近期项目遇到个横竖屏切换的问题,较为复杂,在此记之。 1、Activity中竖... -
Android编程使用Fragment界面向下跳转并一级级返回的实现方法
2020-09-03 05:43:10主要介绍了Android编程使用Fragment界面向下跳转并一级级返回的实现方法,较为详细的分析了Fragment界面跳转所涉及的相关知识点与实现技巧,并附带了完整的实例代码供读者下载参考,需要的朋友可以参考下 -
Fragment之间跳转实现
2016-10-09 08:49:18在跳转时候主要的思路是:A_fragment发送信号-->信号传送到activity-->activity实现fragment切换-->切换到B_fragment。在这里你可能想到两种方式实现,一个是用发送intent广播,activity接...一、Fragment跳转基础
Fragment依附于它的activity,fragment之间的跳转也依赖于activity。在跳转时候主要的思路是:A_fragment发送信号-->信号传送到activity-->activity实现fragment切换-->切换到B_fragment。在这里你可能想到两种方式实现,一个是用发送intent广播,activity接收到该广播然后实现跳转(这里activity可以直接跳转,或者模拟用户点击操作跳转,performClick()之类的,如果UI界面有另外一个frament按钮的话);两另外一个是用回调的方式来实现。用广播的形式跳转这里就不详细说了,接下来是用回调的方式跳转。
二、Fragment之间跳转实现
1、定义一个interface
public interface OnHeadlineSelectedListener { public void onArticleSelected(int position); }
这个接口需要activity继承并实现具体的实现类。在fragment里则当一个方法来调用。2、在onAttach里把对应的interface依附于activity
public class HeadlinesFragment extends ListFragment { OnHeadlineSelectedListener mCallback; // Container Activity must implement this interface public interface OnHeadlineSelectedListener { public void onArticleSelected(int position); } @Override public void onAttach(Activity activity) { super.onAttach(activity); // This makes sure that the container activity has implemented // the callback interface. If not, it throws an exception try { mCallback = (OnHeadlineSelectedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener"); } } ... }
至于为什么要onAttach里这样做呢?这个可以看fragment的生命周期,onAttach是当fragment被加入到activity时调用,在这里可以获取到所在的activity。
3.在fragment里调用接口
@Override public void onListItemClick(ListView l, View v, int position, long id) { // Send the event to the host activity mCallback.onArticleSelected(position); }
在ListFragment里面有个点击事件onListIttemClick回调。在这里调用接口发送切换信号。在你的项目里,你就在需要的地方调用来发送信号切换fragment。
4.在activity里继承接口并实现方法
public static class MainActivity extends Activity implements HeadlinesFragment.OnHeadlineSelectedListener{ ... public void onArticleSelected(int position) { // 用户选中HeadlinesFragment中的头标题后 // 做一些必要的业务操作 ArticleFragment articleFrag = (ArticleFragment) getSupportFragmentManager().findFragmentById(R.id.article_fragment); if (articleFrag != null) { // 这里是实现大屏适应,如果 article frag 不为空,那么同时显示两个fragmnet的布局... articleFrag.updateArticleView(position); } else { // 实现fragment之间的切换 //关联信息 // 创建fragment并给他一个跟选中的文章有关的参数 ArticleFragment newFragment = new ArticleFragment(); Bundle args = new Bundle(); args.putInt(ArticleFragment.ARG_POSITION, position); newFragment.setArguments(args); //实现跳转 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // 用这个fragment替换任何在fragment_container中的东西 // 并添加事务到back stack中以便用户可以回退到之前的状态 transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); // 提交事务 transaction.commit(); } } }
在onArticleSelected里实现跳转fragment跳转的代码。在fragment里调用调用interface就是调用这里的具体实现代码,类似于fragment调用activity里的普通方法一样。
-
android的关于fragment,实现Activity之间的跳转
2013-09-22 15:23:22android的关于fragment的demo,很适合初学者,可以运行,页面效果也不错,可以实现各个Activity之间的跳转,可以取代tabhost -
fragment activity与fragment相互传值 fragment与fragment跳转
2014-11-04 21:38:55自己项目中用到fragment搭建框架,从网上找得一个demo,实现activity与fragment相互传值;fragment与fragment跳转。跟大家分享 -
Android开发fragment界面上点击按钮跳转
2015-08-08 11:11:52Android应用中的fragement跳转demo,跳转是从一个子fragement上的按钮跳转到其他子fragement上,不是通过导航栏上的按钮 -
Android--fragment与activity及两个fragment之间的跳转实现
2021-06-05 09:48:42在应用的交互中,我可能需要实现:从当前的fragment跳转到另一个fragment从当前的fragment跳转到一个activity中从当前的activity跳转到一个fragment中网上提供的思路较多,这里总结了一套自己的方法。一、从当前的...在应用的交互中,我可能需要实现:从当前的fragment跳转到另一个fragment
从当前的fragment跳转到一个activity中
从当前的activity跳转到一个fragment中
网上提供的思路较多,这里总结了一套自己的方法。
一、从当前的fragment跳转到另一个fragment
1.在相应fragment全局中声明fragment管理对象及事务对象。// Fragment管理对象 private FragmentManager manager; private FragmentTransaction ft;1
2
3
2.在OnCreate方法中初始化fragment管理对象@Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); manager = getFragmentManager(); }1
2
3
4
5
6
7
3.从 FragmentManager 获得一个FragmentTransaction实例MyJDEditFragment myJDEditFragment = new MyJDEditFragment();ft = manager.beginTransaction();//当前的fragment会被myJDEditFragment替换ft.replace(R.id.realtabcontent, myJDEditFragment);ft.addToBackStack(null);ft.commit();1
2
3
4
5
6
那么如何在fragment切换的时候还可以传递参数呢?
我们可以使用setArguments()方法绑定一个bundle对象传递到另外一个fragment中。myJDEditFragment.setArguments(bundle);1
在另外一个fragment中(myJDEditFragment)使用getArguments()可以拿到bundle对象。
二、从当前的fragment跳转到一个activity中
由于fragment可以使用 getActivity() 访问Activity实例,所以这一步实现很简单。intent=new Intent(getActivity(), UserLoginActivity.class);startActivity(intent);1
2
三、从当前的activity跳转到一个fragment中
如果是从fragment跳转到activity中,然后想从这个activity中再跳转回fragment,这时直接finish这个activity即可。
如果需求是这样的:
在“更多”页面里点击“账号管理”弹出一个activity,处理完这个activity后我们要跳转到”我的京东“中,该如何实现呢?
1、 在对应activity中使用意图跳转到MainActivity中,这里通过意图塞入了一个标识符(更严谨的方式是通过请求码和结果码实现)。// 登录成功跳转到我的京东首页Intent intent = new Intent(UserLoginActivity.this,MainActivity.class);intent.putExtra("userloginflag", 1);startActivity(intent);1
2
3
4
2.在MainActivity的onResume()方法中得到这个标识符,并且切换到相应的Tab即可。@Override protected void onResume() { int id = getIntent().getIntExtra("userloginflag", 0); if (id == 1 ) { mTabHost.setCurrentTab(3); //3代表”我的京东“所在条目的位置,参考下面的源码即可理解 } super.onResume(); }1
2
3
4
5
6
7
8
9
10
附上MainActiviy.java的源码及布局文件activity_main.xmlpackage com.example.jds;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTabHost;import android.support.v4.app.FragmentTransaction;import android.support.v4.view.ViewPager;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;import android.widget.Toast;import android.widget.TabHost.TabSpec;import android.widget.TextView;import com.example.jds.fragment.CarFragment;import com.example.jds.fragment.CategoryFragment;import com.example.jds.fragment.IndexFragment;import com.example.jds.fragment.MoreFragment;import com.example.jds.fragment.MyJDIndexFragment;import com.example.jds.fragment.SettingFragment;import com.example.jds.util.UserApplication;public class MainActivity extends FragmentActivity { /** * ----------------------------------------------- */ public MyJDIndexFragment myJDIndexFragment; // 更多页面 public MoreFragment moreFragment; // 设置页面 public SettingFragment settingFragment; // 声明控件对象 public FragmentTabHost mTabHost; // 布局填充器 private LayoutInflater inflater; // 存放文本的数组 private int tabHostTextArray[] = { R.string.tabhost_index, R.string.tabhost_category, R.string.tabhost_car, R.string.tabhost_my_jd, R.string.tabhost_more }; // 存放图标的数组 private int tabHostIconArray[] = { R.drawable.tab_home_index, R.drawable.tab_home_category, R.drawable.tab_home_car, R.drawable.tab_home_my_jd, R.drawable.tab_home_more }; // 声明片段对应的数组 private Class fragments[] = { IndexFragment.class, CategoryFragment.class, CarFragment.class, MyJDIndexFragment.class, MoreFragment.class }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化布局填充器对象 inflater = LayoutInflater.from(this); // 查找tabHost对象 mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); // 启动tabHost mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); // 遍历片段 for (int i = 0; i < fragments.length; i++) { // 创建一个TabSpec TabSpec tabSpec = mTabHost.newTabSpec( getResources().getString(tabHostTextArray[i])) .setIndicator(getTabItemView(i)); // 加入到TabHost中 mTabHost.addTab(tabSpec, fragments[i], null); } initview(); } public View getTabItemView(int i) { View view = inflater.inflate(R.layout.tab_nav_item, null); ImageView tab_nav_img = (ImageView) view.findViewById(R.id.tab_nav_img); TextView tab_nav_text = (TextView) view.findViewById(R.id.tab_nav_text); // 设置图片及文本 tab_nav_img.setImageResource(tabHostIconArray[i]); // Toast.makeText(this, tabHostIconArray[i], 1).show(); tab_nav_text.setText(getResources().getString(tabHostTextArray[i])); return view; } /** * fragment */ private void initview() { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); moreFragment = new MoreFragment(); myJDIndexFragment = new MyJDIndexFragment(); // ft.add(R.id.realtabcontent, accountManagerFragment); // ft.add(R.id.realtabcontent, myJDFragment); settingFragment = new SettingFragment(); /* * ft.add(R.id.realtabcontent, accountManagerFragment); * ft.add(R.id.realtabcontent, myJDFragment); * ft.add(R.id.realtabcontent,myJDIndexFragment); * ft.add(R.id.realtabcontent,) */ ft.commit(); } @Override protected void onResume() { int id = getIntent().getIntExtra("userloginflag", 0); if (id == 1 ) { mTabHost.setCurrentTab(3); } super.onResume(); }}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
-
Fragment的四种跳转
2021-05-12 10:56:38从同一个Activiy的一个Fragment跳转到另外一个Fragment 从一个Activity的Fragment跳转到另外一个Activity 从一个Activity跳转到另外一个Activity的Fragment上 从一个Activity的Fragment跳转到另外一个Activity的... -
通过接口的方式实现fragment之间的跳转操作
2017-08-04 15:31:38通过接口的方式实现fragment之间的跳转操作 -
Android fragment嵌套fragment,实现点击列表跳转fragment原理分析
2021-10-28 22:32:12如有错误欢迎指正 上网搜的文章大都是通过...但是fragment的转换的出发事件应该都是发生在fragment内部的吧,在fragment内部发生的事件是fragment自己监听还是activity监听? 我们先来看一下嵌套fragment的... -
Android中Fragment之间的跳转
2021-05-05 10:25:31注意:这一次要实现跳转的两个fragment:第一个fragment是MainActivity里面的一个子fragment(名字叫RecommendFragment),另一个是一个单独的fragment(名字叫TestFragment)。 下面是实现的步骤和一些需要注意的... -
Activity与Fragment之间跳转实现
2018-11-05 16:40:261.实现Activity到Fragment之间的跳转 首先在MainActivity的条件函数中加入如下代码 Intent mIntent = new Intent(MainActivity.this,Menu.class); mIntent.putExtra("id",1); startActivity(mIntent); ... -
如何设置fragment视图跳转activity
2021-04-22 23:05:211.问题描述:我想要给fragment对应的视图中一个字段“修改资料”添加跳转逻辑,即点击跳转到修改用户资料的页面,我原来想的是在原来的activity中直接通过findViewById()拿到fragment视图中的对象,但是这样会产生... -
Fragment+recyclerview实现简易跳转
2020-03-29 11:26:01用fragment+recyclerview实现简易的微信跳转 部分代码已放在码云 https://gitee.com/kadd/android/tree/master/recyclerview 1.网格的实现 tab_chat.xml <androidx.recyclerview.widget.RecyclerView android... -
android studio用viewpaper2+fragment实现滑动页面+点击跳转
2022-04-23 19:50:46再在com.example.text里创建几个fragment. 准备工作结束。 下面按喜好修改布局以及重写适配器。 布局参考 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayou.. -
Android Fragment 跳转方法
2019-04-08 19:02:25最近做项目涉及到了很多关于Fragment跳转的问题,虽然跳转的方式不多,但还是搞的我的晕头转向,所以写了一篇文章主要介绍有关Fragment的四种跳转方式: 1、从同一个Activiy的一个Fragment跳转到另外一个Fragment 2... -
Android Fragment实现底部通知栏
2021-01-03 10:51:04Android Fragment实现底部通知栏,供大家参考,具体内容如下 截图如下: 1. 第一步先要创建fragment(动态注册) 然后将两个勾选取消掉(还有一种是自己手动创建) 会自动生成相对应的layout布局,剩下的要根据... -
Android:通过navigation实现fragment跳转
2021-06-02 00:04:07文章目录配置环境 配置环境 -
Android使用Intent实现页面跳转
2020-08-29 04:35:43主要为大家详细介绍了Android使用Intent实现页面跳转,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
Activity和Fragment的跳转
2020-10-20 17:59:25//Activity Intent intent = new Intent(InfoActivity.this,EmptyActivity.class);//EmptyActivity里面是viewpager...//1代表你要跳转的fragment下标,下标从0开始 startActivity(intent); //fragment所属的activity i