androidfragment刷新
⑴ android 怎么刷新fragment页面
通常的做法,在onResume中发一起一个异步的请求去拿数据,通过回调,收到返回的数据,然后更新UI。
网络获取数据结束判断数据有更新,然后通过set将控件的数据更新。
举例:
这个是我的一个fragment,我把它放在一个viewpager的fragment中
java">{
privatestaticfinalStringARG_CITY="city";
privateStringmCity;
privateTextViewtmpD;
privateTextViewtmpN;
privateSimpleDraweeViewimageD;
privateSimpleDraweeViewimageN;
(Stringcity){
BottomFragmentOnefragment=newBottomFragmentOne();
Bundleargs=newBundle();
args.putString(ARG_CITY,city);
fragment.setArguments(args);
returnfragment;
}
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
if(getArguments()!=null){
mCity=getArguments().getString(ARG_CITY);
}
}
@Override
publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,
BundlesavedInstanceState){
//
Viewview=inflater.inflate(R.layout.bottom_fragment_one,container,false);
tmpD=(TextView)view.findViewById(R.id.tmp_d);
tmpN=(TextView)view.findViewById(R.id.tmp_n);
imageD=(SimpleDraweeView)view.findViewById(R.id.image_d);
imageN=(SimpleDraweeView)view.findViewById(R.id.image_n);
setUI();
returnview;
}
//用来设置UI,更新UI时重新从数据库获取数据,进行设置
publicvoidsetUI(){
Forecastforecast=mFrecastDao.getForecastByCity(mCity);
tmpD.setText(forecast.getDaily_1_max());
tmpN.setText(forecast.getDaily_1_min());
imageD.setImageURI(getImageUri(forecast.getDaily_1_code_d()));
imageN.setImageURI(getImageUri(forecast.getDaily_1_code_n()));
}
}
2.除了上面那个,还有一个类似的fragment,我想实按下按钮后,在两个fragment之间进行切换。下面是按钮代码
@Override
publicvoidonClick(Viewv){
FragmentManagerfm=getChildFragmentManager();
//开启Fragment事务
=fm.beginTransaction();
switch(v.getId())
{
caseR.id.button_left:
if(mBottomOne==null)
{
mBottomOne=newBottomFragmentOne().newInstanceOne(mCity);
}//使用当前Fragment的布局替代id_content的控件
transaction.replace(R.id.bottom_weather,mBottomOne);
break;
caseR.id.button_right:
if(mBottomTwo==null)
{
mBottomTwo=newBottomFragmentTwo().newInstanceTwo(mCity);
}
transaction.replace(R.id.bottom_weather,mBottomTwo);
break;
}
//事务提交
transaction.commit();
}
3.下面是viewpager中的fragment用来更新上面两个fragment数据的方法。
publicvoidUpdateUI(){
mBottomOne.setUI();
mBottomTwo.setUI();
}
⑵ Android中,FragmentTransaction类的replace()方法的作用是什么
对于fragment的使用就我所知就我会的只有两种吧,一种是add方式来进行show和add,这种方式你切换fragment不会让fragment重新刷新,而用replace方式会使fragment重新刷新,因为add方式是将fragment隐藏了而不是销毁再创建,replace方式每次都是重新创建。具体我们还是看代码来说吧,这种基础的东西看看代码就懂了。
⑶ 如何在ViewPager中的各个Fragment间传递数据并刷新Fragment界面
如果Fragment已经存在,试图通过fragment.setArguments(bundle)传递参数将导致异常:
12-02 00:14:55.375: E/AndroidRuntime(8492): java.lang.IllegalStateException: Fragment already active
12-02 00:14:55.375: E/AndroidRuntime(8492): at android.support.v4.app.Fragment.setArguments(Fragment.java:548)
我更新Fragment的常用办法是,为Fragment定义一个public的方法:
// To update fragment in ViewPager, we should implement a public method for the fragment,
// and do updating stuff in this method.
public void updateDate(Date date) {
mDate = date;
mTextView.setText(mDate.toString());
}
然后获取需要更新的Fragment,再然后调用这个方法。
考虑到你只有4个Fragment,可以尝试在activity内用一个Array或者List保存这4个fragment的实例(这种法子比较笨)。
而且需要使用FragmentPagerAdapter,而不是FragmentStatePagerAdapter,这样在ViewPager中切换页面时,fragment的实例也不会被销毁。可以参考我的这篇文章 如何更新及替换ViewPager中的Fragment
⑷ android 在用add hide show 方法切换fragment的时候怎么刷新数据
当Fragment隐藏后重新展示时(fragment.show),调用onrequest刷新界面
* 否则每次都要重新复制
*/
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (!hidden) {
//rootview是Fragment通过inflate进来的布局
rootView.invalidate();
⑸ android 怎样在fragment中给listview添加下拉刷新上拉加载
注意事项:
1、XListView因为添加了Header,会导致存储的数据+1,所以赋值时需要position-1。补充:当去掉HeaderView时,position不用-1。
2、提个建议:上拉加载更多,最好在onCreate()中就执行setAdapter,然后不论是空数据、还是有数据,只用更新适配器就行了。
一、XListView
1、下载
gitHub的地址。或者从这儿下。
2、用法
导入图中的me.maxwin.view包
提供了两个接口:
IXListViewListener:触发下拉刷新,上拉加载更多。实现此接口时,onLoadMore()用来上拉加载更多,onRefresh()用来下拉刷新。
⑹ android Fragment 实时更新数据问题。
写个回调的接口,当activity刷新数据的时候,调fragment的接口就可以了
或者简单的用eventbus或者用localbroadcastreceiver
⑺ android中Fragment能否实现下拉刷新
可以啊。下拉刷新跟actionbar没有一毛钱的关系。
⑻ Android中Fragment怎样刷新UI
刷新UI要在主线程,Fragment和Activity是类似的,所以在要刷新UI的地方handler发送消息,在主线程中定义的hanler处理消息,更新UI,建议看下安卓的安卓handler机制。