原地址:http://blog.csdn.net/leoleohan/article/details/46490193?utm_source=tuicool
在近期的练手项目中,我们使用到了Android Fragment。在应用的交互中,我可能需要实现:
- 从当前的fragment跳转到另一个fragment
- 从当前的fragment跳转到一个activity中
- 从当前的activity跳转到一个fragment中
网上提供的思路较多,这里总结了一套自己的方法。
一、从当前的fragment跳转到另一个fragment
1.在相应fragment全局中声明fragment管理对象及事务对象。
private FragmentManager manager; private FragmentTransaction ft;
2.在OnCreate方法中初始化fragment管理对象
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); manager = getFragmentManager(); }
3.从 FragmentManager 获得一个FragmentTransaction实例
MyJDEditFragment myJDEditFragment = new MyJDEditFragment();ft = manager.beginTransaction();ft.replace(R.id.realtabcontent, myJDEditFragment);ft.addToBackStack(null);ft.commit();
那么如何在fragment切换的时候还可以传递参数呢?
我们可以使用setArguments()方法绑定一个bundle对象传递到另外一个fragment中。
myJDEditFragment.setArguments(bundle)
在另外一个fragment中(myJDEditFragment)使用getArguments()可以拿到bundle对象。
二、从当前的fragment跳转到一个activity中
由于fragment可以使用 getActivity() 访问Activity实例,所以这一步实现很简单。
intent=new Intent(getActivity(), UserLoginActivity.class);startActivity(intent);
三、从当前的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);
2.在MainActivity的onResume()方法中得到这个标识符,并且切换到相应的Tab即可。
@Override protected void onResume() { int id = getIntent().getIntExtra("userloginflag", 0); if (id == 1 ) { mTabHost.setCurrentTab(3); } super.onResume(); }
附上MainActiviy.Java的源码及布局文件activity_main.xml
package com.example.jdsimport android.os.Bundleimport android.support.v4.app.FragmentActivityimport android.support.v4.app.FragmentManagerimport android.support.v4.app.FragmentTabHostimport android.support.v4.app.FragmentTransactionimport android.support.v4.view.ViewPagerimport android.view.LayoutInflaterimport android.view.Viewimport android.widget.ImageViewimport android.widget.Toastimport android.widget.TabHost.TabSpecimport android.widget.TextViewimport com.example.jds.fragment.CarFragmentimport com.example.jds.fragment.CategoryFragmentimport com.example.jds.fragment.IndexFragmentimport com.example.jds.fragment.MoreFragmentimport com.example.jds.fragment.MyJDIndexFragmentimport com.example.jds.fragment.SettingFragmentimport com.example.jds.util.UserApplicationpublic 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 // 创建一个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 } 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.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
- 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
<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" android:orientation="vertical" android:background="#DDDDDD" tools:context="${relativePackage}.${activityClass}" > <FrameLayout android:id="@+id/realtabcontent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <android.support.v4.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_tabhost"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0"/> </android.support.v4.app.FragmentTabHost></LinearLayout>
- 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
- 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
0 0