关于Fragment切换的问题

student-ai student-ai 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
第一个问题是:Fragment切换进行了处理,TextView(文本很长,用了ScollView)的进度可以保存,但是换成请求网络数据的ListView就导致每次都重新加载了.

第二个问题是:在主界面底部RadioGroup会遮挡Fragment里面的ListView(滚动条拉到最底下,但是数据显示不全)

主Activity切换Fragment的代码:


@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Fragment fragment = (Fragment) mFragmentPagerAdapter.instantiateItem(fragment_container,
buttonView.getId());
mFragmentPagerAdapter.setPrimaryItem(fragment_container, 0, fragment);
mFragmentPagerAdapter.finishUpdate(fragment_container);
}
}


private FragmentPagerAdapter mFragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public android.support.v4.app.Fragment getItem(int position) {
switch (position) {
case R.id.rbtn_see:
return new SeeFragment();
case R.id.rbtn_simg:
return new SimgFragment();
case R.id.rbtn_about:
default:
return new AboutFragment();
}
}

@Override
public int getCount() {
return 3;
}
};


其中一个Fragment的代码[下面这个代码中涉及到一个LazyFragment的类代码在最下面]:



import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;


import java.util.List;

/**
* Created by puruidong on 8/15/15.
*/




public class SeeFragment extends LazyFragment {
// 标志位,标志已经初始化完成。
private boolean isPrepared;
private ArrayAdapter<String> adapter;
private View view;
private ListView lvSee;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
/*
在这里对Fragment的View进行了缓存,但是没有效果,
在每次切换的时候依然会对ListView进行重新从网络进行加载.

*/

if (view == null) {
view = inflater.inflate(R.layout.see_fragment, null);
lvSee = (ListView) view.findViewById(R.id.lv_see);
adapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1);
isPrepared = true;
lazyLoad();
}
// 缓存的rootView需要判断是否已经被加过parent,如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeView(view);
}
return view;
}

@Override
protected void lazyLoad() {
if (!isPrepared || !isVisible) {
return;
}
//填充各控件的数据

//下面是网络加载部分
NetworkUtils network = new NetworkUtils(this.getActivity());
if (lvSee == null) {
Log.i("SEE", "******这是空的......SeeFragment6666666666666666666666666666666666666666----------------------------------------");
}
network.getJsonArrayData("url", new NetworkUtils.VolleyResultData<See>() {
@Override
public void onSuccess(List<See> list) {
Log.i("SEE", list.size() + "******6666666666666666666666666666666666666666----------------------------------------");
for (int i = 0; i < list.size(); i++) {
if (list.get(i) != null) {
adapter.add(list.get(i).getValue());
}
}
}
});
lvSee.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
//加载网络数据.


}




主界面布局文件:


<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"
android:orientation="vertical"
>

<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="fill_parent"
/>

<RadioGroup
android:id="@+id/rdogop_btm"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_alignParentBottom="true"
android:layout_marginBottom="-6dp"
android:gravity="bottom"
android:orientation="horizontal"
android:background="@android:color/background_dark"
>

<RadioButton
android:id="@+id/rbtn_see"
android:layout_width="0dp"
android:drawableTop="@mipmap/ic_launcher"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center_horizontal"
android:text="c"
/>

<RadioButton
android:id="@+id/rbtn_simg"
android:layout_width="0dp"
android:drawableTop="@mipmap/ic_launcher"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center_horizontal"
android:text="b"
/>

<RadioButton
android:id="@+id/rbtn_about"
android:layout_width="0dp"
android:drawableTop="@mipmap/ic_launcher"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center_horizontal"
android:text="c"
/>
</RadioGroup>


</RelativeLayout>



Fragment懒加载:


/**
*
* Fragment数据的缓加载.
*
*
* #{link http://blog.csdn.net/maosidiaoxian/article/details/38300627}
*
* Created by puruidong on 8/16/15.
*/
public abstract class LazyFragment extends Fragment {
protected boolean isVisible;


@Override
public void setMenuVisibility(boolean menuVisible) {
super.setMenuVisibility(menuVisible);
if (this.getView() != null)
this.getView().setVisibility(menuVisible ? View.VISIBLE : View.GONE);
}

/**
* 在这里实现Fragment数据的缓加载.
*
* @param isVisibleToUser
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}

protected void onVisible() {
lazyLoad();
}

protected abstract void lazyLoad();

protected void onInvisible() {
}


}




在线等,挺急的,谢谢。。、

...全文

相关推荐

Fragment多个的切换重叠问题解决

然而,在处理多个Fragment之间的切换时,有时会出现重叠问题,这通常会影响用户体验。本篇文章将深入探讨Fragment重叠问题的成因,并提供有效的解决方案。**问题成因**1.

黑暗中并肩行走

Android解决多个Fragment切换时布局重新实例化问题,并保存当前fragment页面,系统回收后还原之前fragment页面,更新版

然而,当涉及到多个Fragment之间的切换时,可能会遇到一个问题:每次切换时,Fragment的布局可能会被重新实例化,导致用户体验下降,例如丢失用户在Fragment中的状态。

F-Fan

Android解决多个Fragment切换时布局重新实例化问题,并保存当前fragment页面,系统回收后还原之前fragment页面,内附源码及apk

Android解决多个Fragment切换时布局重新实例化问题,并保存当前fragment页面,系统回收后还原之前fragment页面,内附源码及apk,博客:http://blog.csdn.net

F-Fan

Tab-with-Fragment:架构:用Fragment替代4.0之前Tab Host的Demo,解决了图片适配、切换选项卡后重新加载等问题

本文将详细介绍如何使用Fragment替代Tab Host,以及如何解决图片适配和选项卡切换后重新加载的问题。

快快跑起来

Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法

然而,在`Fragment`之间切换时,如果其中一个`Fragment`包含`SurfaceView`,可能会遇到黑屏闪烁的问题。这个问题通常是由于`SurfaceView`的特殊渲染机制导致的。

weixin_38691970
评论 4
收藏 已收藏
分享
返回顶部
student-ai
Android 80,490 成员 91,375 内容