80,349
社区成员
发帖
与我相关
我的任务
分享
也在坐等这个问题,搂住,解决了吗?
回复错了,fragment的oncreateview的在oncreateactivity之前,你怎么后面去异步了??? activity和fragment是独立的,activity可以用异步线程去做些事情的,你可以看下SyncTask类。
update是否可以重新更新界面view,但是好像用户体验性不好,比如你进入一个fragment,显示了一个默认的界面,过了一会数据更新好了,又显示一个新的界面,,,
问题json是会改变的,所以无法统一管理,这点让我很蛋疼,,, [quote=引用 21 楼 heaimnmn 的回复:] [quote=引用 12 楼 sagittarius1988 的回复:] 网络请求的是否可以统一在一个网络请求类管理呢?需要时,只需传入参数和回调,请求好后,在回调中获取
[quote=引用 1 楼 heaimnmn 的回复:] 两百分都给我沉下去了,不要嘛,大家说下自己的想法就OK,思路也行我看看可以实践不,,,
问题json是会改变的,所以无法统一管理,这点让我很蛋疼,,, [quote=引用 12 楼 sagittarius1988 的回复:] 网络请求的是否可以统一在一个网络请求类管理呢?需要时,只需传入参数和回调,请求好后,在回调中获取
但是可以在MainActivity里面一次性请求好,何必再重复请求了,,, [quote=引用 3 楼 heaimnmn 的回复:] [quote=引用 2 楼 u014387289 的回复:] 如果fragment的数据都不一样,请求N次有什么问题?
问题json是会改变的,所以无法统一管理,这点让我很蛋疼,,, 网络请求的是否可以统一在一个网络请求类管理呢?需要时,只需传入参数和回调,请求好后,在回调中获取
这是我以前写的一个简化版的BaseFragment,至于异步获取,本菜觉得放哪无所谓吧,可能我没明白lz的意思。直接在Activity中获取数据,更新Fragment可以,或者在BaseFragment中加个abstract Update 方法,在异步获取之后调用Update也可以。package Fragment; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.cs.MyApplication; import com.google.gson.Gson; import java.lang.reflect.Field; public abstract class BaseFragment extends Fragment{ protected View view;//Fragment layout 最外层 View protected Context context = MyApplication.getApplication(); protected final static Gson gson = new Gson();//用来解析json用 protected String json_str;//传递的json字符串 protected static final String json_key = "json"; boolean should_new_newview = true; public BaseFragment() { themeob.addObserver(this); } //这个方法可以在Activity中直接获取Fragment的View public final View findViewById(int id) { return view.findViewById(id); } public final View getView() { return view; } @Override public final View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (view == null || should_new_newview) { view = monCreateView(inflater, container, savedInstanceState); } return view; } @Override public void onDestroyView() { super.onDestroyView(); should_new_newview = true; } @Override public void onDestroy() { super.onDestroy(); themeob.deleteObserver(this); } //调用此方法更新保存的数据 public final void msetArguments(Bundle bundle) { try { Field mArguments_field = getClass().getDeclaredField("mArguments"); mArguments_field.setAccessible(true); mArguments_field.set(this, bundle); } catch (Exception e) { } } public abstract View monCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState); }
网络请求的是否可以统一在一个网络请求类管理呢?需要时,只需传入参数和回调,请求好后,在回调中获取
不知道理解可对: 在Fragment可以提前初始化 onCreateView()这个方法 onCreateView(){ //此时还没有数据,所以显示 数据正在加载中 showLoadingView()吧 return view; } public void onUpdateView(JSONDATA data){ //现在UI线程中更新 之前Fragment还在显示loadingView, } class MainActivity { //activty中做异步请求数据,如果请求成功 调用 Fragment中自己写的onUpdateView()方法. } //但我到喜欢把网络数据请求都写在service里面,然后网络获取数据结果通过广播回调 Intent intent = new Intent(this,MyService.class); //这个Service 就是专门请求网络数据的。 intent.putString("reqURL",myURL); intent.putString("params",params); startService(intent); 在onStartCommand() 里面通过判断 进行网络通信操作。 // service 里面为了避免多个线程浪费 我开启了一个线程池,大小为3个估计是够了。然后用阻塞队列控制。LinkedBlockingQueue.