当前位置:首页 » 安卓系统 » android切换fragment

android切换fragment

发布时间: 2022-05-17 16:38:33

1. android中Fragment的切换方法。

需要做的准备
新建一个android项目,主Activity命名为MainActivity
创建三个Fragment1 Fragment2 Fragment3
为三个Fragment创建三个布局文fragment1.xml、fragment2.xml、fragment3.xml
布局 activity_main.xm
fragment1.xml样例

Fragment1样例

另外的可以根据样例进行修改
activity_main.xml内容

activity打开时需要显示一个fragment,也就是需要先向容器中添加一个fragment

这是就能显示第二个fragment了,那么如何切换不同的fragment呢,切换的过程如下
开启事务
调用事务的replace方法,将当前容器的fragment替换为新的fragment
提交事务

注意上图红框中的addToBackStack方法,很多人都不是很清楚这个方法的实际作用,说一下程序运行时候的现象你就明白了
初始化时显示的是 fragment2
实践1 :fragment2------点击按钮frag1-----按返回键--------退出应用
实践2: fragment2-----点击按钮frag3 -----按返回键--------返回到fragment2
为啥会出现上面的情况,原因就是切换到fragment3时,调用了addToBackStack方法,这时会将fragment2先入栈,然后再切换到fragment3,按返回键的时候fragment3销毁,fragment2出栈显示,而切换到fragme1时没有将fragme2入栈,所以fragment2就直接销毁了,再按返回键就直接退出应用了

2. 如何解决fragment之间切换时黑屏问题

Android中使用fragment来实现页面的切换,如果导致fragment之间切换时黑屏,可能的原因如下:
Fragment所绑定的activity已经被销毁,而程序引用了activity,报空指针就会意外退出。
Fragment新建之后,没有进行commit操作,导致无法实例化该Fragment。
解决的方式是在使用activity时,进行判断,如下代码:
@Override
public void onHiddenChanged(boolean hidd) {
if (!hidd && getActivity() != null) {
System.out.println("是否执行了这个方法");
}
}

3. android viewpager如何替换fragment

ViewPager.setOffscreenPageLimit(x);//x表示预加载几页,这个应该可以解决你显示空白的问题
然后你要有ViewPagerAdapter,
ViewPagerAdapter extends FragmentPagerAdapter
在重写的getItem()里判断return 不同的Fragment对象
加油,没写清楚的话可以去下个demo分析

4. 安卓fragmentactivity怎么用切换

版本说明
fragment是在3.0版本引入的,但是也可以在以前的版本中使用,需要引入android-support-v4.jar支持包,当然调用的方法也不一样,下面介绍的方法兼容了3.0以前的版本,主要介绍fragment的切换
需要做的准备
新建一个android项目,主Activity命名为MainActivity
创建三个Fragment1 Fragment2 Fragment3
为三个Fragment创建三个布局文fragment1.xml、fragment2.xml、fragment3.xml
布局 activity_main.xm
fragment1.xml样例

Fragment1样例

另外的可以根据样例进行修改
activity_main.xml内容

activity打开时我们需要显示一个fragment,也就是需要先向容器中添加一个fragment

这是就能显示第二个fragment了,那么如何切换不同的fragment呢,切换的过程如下
开启事务
调用事务的replace方法,将当前容器的fragment替换为新的fragment
提交事务

注意上图红框中的addToBackStack方法,很多人都不是很清楚这个方法的实际作用,说一下程序运行时候的现象你就明白了
初始化时显示的是 fragment2
实践1 :fragment2------点击按钮frag1-----按返回键--------退出应用
实践2: fragment2-----点击按钮frag3 -----按返回键--------返回到fragment2
为啥会出现上面的情况,原因就是切换到fragment3时,调用了addToBackStack方法,这时会将fragment2先入栈,然后再切换到fragment3,按返回键的时候fragment3销毁,fragment2出栈显示,而切换到fragme1时没有将fragme2入栈,所以fragment2就直接销毁了,再按返回键就直接退出应用了

5. android activity中有多个fragment切换

1、首先定义RegistActivity

public class RegistActivity extends Activity {

private EditText userEditText;
private EditText verifyCodeText;

private Fragment verifyCodeFragment;
private Fragment checkCodeFragment;

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

if (savedInstanceState == null) {
verifyCodeFragment = new VerifyCodeFragment();
getFragmentManager().beginTransaction()
.add(R.id.activity_regist, verifyCodeFragment).commit();
}
}
}
activity_regist.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas。android。com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_regist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.javen.activity.RegistActivity" >

</LinearLayout>
这边通过java代码来加入Fragment。
2、fragment_verifycode.xml 获取验证码的界面


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas。android。com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context="com.javen.activity.fragment.VerifyCodeFragment" >

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/message"
android:textSize="@dimen/label_font_size" />

<EditText
android:id="@+id/userEditText"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:inputType="text" />
</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textSize="@dimen/label_font_size" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal" >

<Button
android:id="@+id/bnRegist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:onClick="verifyCodeListener"
android:text="@string/next" />
</LinearLayout>

</LinearLayout>
2、输入验证码的界面:fragment_checkcode.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context="com.javen.activity.fragment.CheckCodeFragment" >

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/verifyCode"
android:textSize="@dimen/label_font_size" />

<EditText
android:id="@+id/verifyCodeText"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:inputType="text" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal" >

<Button
android:id="@+id/bnRegist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:onClick="checkCodeListener"
android:text="@string/next" />
</LinearLayout>

</LinearLayout>
3、设置按钮Listener,此处需要在Activity里面添加方法。
public void verifyCodeListener(View source) {

userEditText = (EditText) verifyCodeFragment.getView().findViewById(
R.id.userEditText);

String phoneNumber = userEditText.getText().toString().trim();
if (!Tools.matchPhone(phoneNumber)) {<span style="white-space:pre"> </span>//对手机号码验证的一个正则表达式方法
DialogUtil.showDialog(this, Constant.LOGIN_USER_NAME, false);
return;
}
this.getVerifyCode(phoneNumber);<span style="white-space:pre"> </span>//Http请求获取验证码
// 释放当前的fragment,重新设置短信验证码输入的fragment
FragmentTransaction transaction = getFragmentManager()
.beginTransaction();
transaction.remove(verifyCodeFragment);
checkCodeFragment = new CheckCodeFragment();
transaction.add(R.id.activity_regist, checkCodeFragment).commit();
}
主要切换代码为:
<span style="white-space:pre"> </span>// 释放当前的fragment,重新设置短信验证码输入的fragment
FragmentTransaction transaction = getFragmentManager()
.beginTransaction();
transaction.remove(verifyCodeFragment);
checkCodeFragment = new CheckCodeFragment();
transaction.add(R.id.activity_regist, checkCodeFragment).commit();
checkCodeListener:
public void checkCodeListener(View source) {
verifyCodeText = (EditText) checkCodeFragment.getView().findViewById(
R.id.verifyCodeText);
String verifyCode = verifyCodeText.getText().toString().trim();

Map<String, String> params = new HashMap<String, String>();
params.put("verifyCode", verifyCode);

String url = UrlsUtil.formatUrl(UrlConstant.REGIST_CHECKCODE);

String result = null;
try {
result = HttpsUtil.postRequest(url, params);
} catch (Exception e) {
e.printStackTrace();
DialogUtil.showDialog(this, Constant.SERVICE_ERRO, false);
}

if(result != null){
//TODO
}
}
说明一下:
这边主要说明的是Fragment切换的过程,至于Http请求,Util方法什么的,只要了解这个功能即可,代码其实和普通工具类似的。
转载

6. android fragment相互切换的时候生命周期怎么走

Fragment的生命周期初探:
因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。
如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。
但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。
当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。
使用Fragment时,需要继承Fragment或者Fragment的子类(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment),所以Fragment的代码看起来和Activity的类似。
每当创建一个Fragment时,首先添加以下三个回调方法:
onCreate():系统在创建Fragment的时候调用这个方法,这里应该初始化相关的组件,一些即便是被暂停或者被停止时依然需要保留的东西。 onCreateView():当第一次绘制Fragment的UI时系统调用这个方法,该方法将返回一个View,如果Fragment不提供UI也可以返回null。注意,如果继承自ListFragment,onCreateView()默认的实现会返回一个ListView,所以不用自己实现。 onPause():当用户离开Fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。
将Fragment加载到Activity当中有两种方式:
方式一:添加Fragment到Activity的布局文件当中 方式二:在Activity的代码中动态添加Fragment(荐)
第一种方式虽然简单但灵活性不够。添加Fragment到Activity的布局文件当中,就等同于将Fragment及其视图与activity的视图绑定在一起,且在activity的生命周期过程中,无法切换fragment视图。
第二种方式比较复杂,但也是唯一一种可以在运行时控制fragment的方式(加载、移除、替换)。

7. android怎么设置fragment切换

需要做的准备
新建一个android项目,主Activity命名为MainActivity
创建三个Fragment1 Fragment2 Fragment3
为三个Fragment创建三个布局文fragment1.xml、fragment2.xml、fragment3.xml
布局 activity_main.xm
fragment1.xml样例

Fragment1样例

另外的可以根据样例进行修改
activity_main.xml内容

activity打开时我们需要显示一个fragment,也就是需要先向容器中添加一个fragment
这是就能显示第二个fragment了,那么如何切换不同的fragment呢,切换的过程如下
开启事务
调用事务的replace方法,将当前容器的fragment替换为新的fragment
提交事务
初始化时显示的是 fragment2
实践1 :fragment2------点击按钮frag1-----按返回键--------退出应用
实践2: fragment2-----点击按钮frag3 -----按返回键--------返回到fragment2
为啥会出现上面的情况,原因就是切换到fragment3时,调用了addToBackStack方法,这时会将fragment2先入栈,然后再切换到fragment3,按返回键的时候fragment3销毁,fragment2出栈显示,而切换到fragme1时没有将fragme2入栈,所以fragment2就直接销毁了,再按返回键就直接退出应用了。

8. Android中Fragment切换时,难道每次都要新创建Fragment实例吗

你可以先把两个Fragment添加进去(使用add而不是replace方法),然后再使用FragmentManager的show()和hide()来控制具体该显示哪个。

9. android中在多个Fragment中切换是否沉浸,界面布局不能铺满或者被拉伸

天想试试沉浸栏的使用,但是按照网上相应的方法设置完成后,没有达到想要的结果。使用情况是activity配合groupradio实现fragment切换,每个fragment的状态栏需要显示不同的颜色。通过hide和show的方式控制显示当前fragment。在对应的xml中设置Android:fitsSystemWindows="true",以达到改变状态栏颜色的问题(具体如何配置请查阅其他文档)。

但是这样做第一个fragment达到了想要的效果,其他三个状态栏的颜色正确,但是padding没有设置成功。标题栏占用状态栏的位置。

解决方法:

将xml中的android:fitsSystemWindows="true"去掉,通过代码的方式来控制。在默认第一个fragment的onCreateView中设置view.setFitsSystemWindows(true);该view为该fragment对应的view。在onHiddenChanged中,设置对应的状态。

详细

热点内容
javajs引擎 发布:2024-05-04 06:37:33 浏览:796
javalist重复 发布:2024-05-04 06:19:27 浏览:509
max脚本管理 发布:2024-05-04 06:02:31 浏览:44
自行搭建服务器 发布:2024-05-04 06:01:12 浏览:125
h3c如何查看所有配置 发布:2024-05-04 05:26:39 浏览:493
java统计字符串中字母个数 发布:2024-05-04 05:22:58 浏览:888
throwablejava 发布:2024-05-04 05:22:56 浏览:792
IP和服务器可以分开架设吗 发布:2024-05-04 05:17:48 浏览:28
ip提取源码 发布:2024-05-04 05:01:42 浏览:763
驾校报名了密码是什么 发布:2024-05-04 04:49:02 浏览:610