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機制。