當前位置:首頁 » 安卓系統 » androidfragment方法

androidfragment方法

發布時間: 2023-07-24 22:24:20

① android fragment 刷新功能

本文 介紹兩點 已是fragment的切換 一是fragment刷新  

先說第一點 fragment的切換  

目前fragment在開發中應用越來越廣泛 當然也非常方便 

而我們切換fragment 也有兩中方式 

第一種是replace的方法進行的 這種方式要看運用場景 用起來很方便 但是個人感覺效果並不好 因為這種方式進行切換得話 首先他會remove掉當前的fragment,然後在new 一個新的fragment進行add,也就是說當前fragment中的所有東西都是重新載入的 所以個人不建議使用這種方式進行fragment的高頻率切換 這種只適合fragment切換和使用次數比較少的情況 

第二種是show+hide 進行fragment切換 這種方式相比第一種可能會復雜一點 首先要建立幾個fragment 開始事務 然後判斷添加 舉個例子 

1 創建fragment…… 

2 添加事務 android.app.FragmentTransaction ft = getFragmentManager().beginTransaction(); 

–#在添加之前先進行判斷隱藏#– 

// 這是hide fragment 的方法 

onHideFragment(ft); 

3 判斷添加 

if (homeFragment==null){ 

homeFragment = new HomeFragment(); 

ft.add(R.id.content,homeFragment); 

}else { 

ft.show(homeFragment); 



4 判斷隱藏 

if (homeFragment!=null){ 

ft.hide(homeFragment); 



5 添加一個默認顯示fragment 也就是你進入activity需要顯示的那個 

好 此時你就完成了使用hide + show 進行fragment切換了

現在我們說第二點 就是fragment的刷新需求  

我們可能會需要fragment的刷新功能 例如說是我首頁使用fragment 進行功能切換時 希望返回到之前的fragment可以刷新 或者返回到activity時 fragment也可以刷新 本人使用了 兩種方法進行fragment的刷新 我想大部分應該都會使用第一種 返回activity時 fragment刷新 就是重寫acvitity的onstart() 方法進行刷新fragment的數據 但是這是有弊端的 第一就是假如你使用了listview或者gridview 時會出現重復載入的情況 所以使用這種方法時 你就要進行清空數據並刷新適配器就可以避免了 

第二種 就是使用hide+show時 在fragment進行切換時 刷新fragment 此時會有這樣一個這樣的方法 onHiddenChanged(boolean hidden);看方法名 你也可以看出來 就是在hide有變化時使用 hidden參數是boolean 當hidden為true時表示fragment在hide 此時不必更新數據 當hidden為false時 他就不隱藏了 此時更新 

if (hidden){ 

return; 

}else { 

list.clear(); 

getSellList(); 



list是要清空的 避免重復載入 

–#onHiddenChanged(boolean hidden); 這是fragment的方法哦 !!!#– 

本文 到此結束 希望對各位有所幫助 有問題可以評論區提出 大家一起進步

② Android activity與fragment之間通信的好的方法有哪些

在fragment裡面有個重寫的onAttach方法,可以引用到對應的父Activity。另外,可以用介面實現他們之間的數據交互,還可以寫成公共靜態方法,直接用類名調用。需要靈活處理。

③ Android回顧--(十七) Fragment的使用與必踩之坑

  碎片,抽象的理解就是一個控制項,只是這個控制項內部維護了自身的生命周期。Fragment是依賴於Activity,用於顯示頁面的一部分內容。

這里有的人就會提出疑問了,Android中其他的控制項也能在頁面顯示一部分的內容,為什麼還要引入Fragment?

像控制項一樣,在XML文件裡面聲明控制項 然後控制項就顯示出來了

Fragment中的控制項的事件的處理:

注意:replace()實際是先清除容器裡面的Fragment,調用remove方法,然後再執行添加當前的Fragment,add()方法。如果我們每一次都用replace()的話,那麼會造成一個問題,就是每一次都會先將前一個先刪除,後面一個才能添加上。 造成每一個都需要重新CreatView()那麼這么做的話,如果連續不斷的去切換的話就會造成卡頓現象,為了解決這個問題就引出了一個概念就是Fragment的優化

注意事項:當我們添加進一個Fragment後,然後再向這個container中添加哪個Fragment的話,那麼前一個Fragment沒有被殺掉,只是沒有顯示而已
將當前Fragment的界面顯示至幀布局中

我們一般是在onActivityCreateed()方法中處理一些事務。在使用過程中我們要注意一下幾點、:

使用工廠類

棧的存儲模式:先進後出
Activity也有自己的回退棧

事務:指的是一系列指令的合集,這一系列的指令要麼全部執行,要麼都不執行

這個地方的id是ft.commit()的返回值,不是Fragment得id

④ Android組件之Fragment(一)---基礎知識與運用

Fragment是Android3.0後引入的一個新的API,他出現的初衷是為了適應大屏幕的平板電腦, 當然現在他仍然是平板APP UI設計的寵兒,而且我們普通手機開發也會加入這個Fragment, 我們可以把他看成一個小型的Activity,又稱Activity片段!想想,如果一個很大的界面,我們 就一個布局,寫起界面來會有多麻煩,而且如果組件多的話是管理起來也很麻煩!而使用Fragment 我們可以把屏幕劃分成幾塊,然後進行分組,進行一個模塊化的管理!從而可以更加方便的在 運行過程中動態地更新Activity的用戶界面!另外Fragment並不能單獨使用,他需要嵌套在Activity 中使用,盡管他擁有自己的生命周期,但是還是會受到宿主Activity的生命周期的影響,比如Activity 被destory銷毀了,他也會跟著銷毀!

引用官方的一張圖片,其實已經說明問題了,就是為了更好的適配大屏,在大屏的時候,不需要去在一個activity內部通過復雜的布局和界面去實現,只需要去在一個activity內部,通過多個fragment來做界面布局實現即可,而且針對於多個fragment來說, 每個fragment有單獨的生命周期,

Demo樣例,我們在一個界面中,有上下兩個fragment,如圖所示:

Step 2: Fragment創建,視圖載入,數據賦值
BlankFragment .java

Step 3: Activity在onCreate( )方法中調用setContentView()之後調用FragmentTransaction 進行事務提交
FragmentTestActivity.java

在xml中聲明兩個fragment,指定為具體的fragment

Step 1:定義Fragment的布局,就是fragment顯示內容的

Step 2:自定義一個Fragment類,需要繼承Fragment或者他的子類,重寫onCreateView()方法 在該方法中調用:inflater.inflate()方法載入Fragment的布局文件,接著返回載入的view對象
BlankFragment.java

Step 3:在需要載入Fragment的Activity對應的布局文件中添加fragment的標簽, 記住,name屬性是全限定類名哦,就是要包含Fragment的包名,如:

Step 4: Activity在onCreate( )方法中調用setContentView()載入布局文件即可!

針對在一個Activity中的某個Layout中切換Fragment,,無非兩種方法:

我們自己看一下方法注釋

源碼方法注釋裡面說的很明白,這個方法會移除所有的fragment,然後添加當前的fragment。
這時分為兩種情況,一種是fragment已有並且在前台展示,一種是未有或者在後台,針對於前者,此時replace,生命周期不會發生變化,針對後者,生命周期會重新走

分為兩種情況,一種fragment已存在,一種未存在,針對於前者,生命周期無變化,但是會回調onHiddenChanged方法,針對於後者,生命周期會創建一次。

1.Fragment是Google官方引入的一個為了適配大屏、多頁面的一個組件。您可以理解為它就是一個類而已,只不過裡麵包含了View,並且與activity的生命周期進行了關聯。
2.動態載入與靜態載入相對來說,建議使用動態載入,靜態載入固定在了xml文件中,永遠不變。
3.replace的fragment如果不在前台,會執行所有生命周期,反之不會執行任何生命周期方法;hide+show生命周期並不會發生變化,但是會回調onHiddenChanged方法,在實際開發中,建議add之後,使用hide+show來操作fragment,一方面減少資源的重復載入和創建,另外一方面提升用戶體驗感。
4.fragment的生命周期大體上和activity一致,但是前期和後期多了一些東西,因為fragment內部有view,那麼這個view需要進行創建、然後添加到activity內部,所以相應的在onCreate與onStart之間就多了幾個方法-onCreateView、onViewCreated。相同的道理,fragment的view與activity解綁,也相應的在onStop與onDestory之間多個方法-onDestroyView。onAttach與onDetach可以理解為視圖與activity產生關聯和接觸關聯,是最開始和最後的步驟。

Demo地址

⑤ android 在fragment里的怎樣實現滑動fragment

按照一般的思路,我們或許會這么做:首先,使用getActionBar()方法獲得操作欄,然後我們將操作欄的導航模式設置為Tab,並添加一些Tab,然後實現TabListener介面;其次,我們將多個布局通過Inflater()方法變成View,然後放到ViewPager裡面,並實現OnPageChangeListener介面就可以了。由此我們可以寫出下面的代碼:

package com.Android.AnyViewUI;

import java.util.ArrayList;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;

public class MainActivity extends FragmentActivity implements TabListener,OnPageChangeListener {

private ActionBar mActionBar;
private ViewPager mViewPager;
private TabPagerAdapter mAdapter;
private ArrayList<View> mViews;
private ArrayList<ActionBar.Tab> mTabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
//取得ActionBar
mActionBar=getActionBar();
//以Tab方式導航
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//禁用ActionBar標題
mActionBar.setDisplayShowTitleEnabled(false);
//禁用ActionBar圖標
mActionBar.setDisplayUseLogoEnabled(false);
//禁用ActionBar返回鍵
mActionBar.setDisplayShowHomeEnabled(false);
//添加Tabs
mTabs=new ArrayList<ActionBar.Tab>();

ActionBar.Tab tab0=mActionBar.newTab();
tab0.setText("界面一");
tab0.setTabListener(this);
mTabs.add(tab0);
mActionBar.addTab(tab0);

ActionBar.Tab tab1=mActionBar.newTab();
tab1.setText("界面二");
tab1.setTabListener(this);
mTabs.add(tab1);
mActionBar.addTab(tab1);

ActionBar.Tab tab2=mActionBar.newTab();
tab2.setText("界面三");
tab2.setTabListener(this);
mTabs.add(tab2);
mActionBar.addTab(tab2);

//獲取ViewPager
mViewPager=(ViewPager)findViewById(R.id.ViewPager);
//初始化mViews
mViews=new ArrayList<View>();
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_0, null));
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_1, null));
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_2, null));
//初始化mAdapter
mAdapter=new TabPagerAdapter(mViews);
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(this);
//默認顯示第二項
mViewPager.setCurrentItem(2);

}


@Override
public void onTabReselected(Tab mTab, FragmentTransaction arg1)
{

}

@Override
public void onTabSelected(Tab mTab, FragmentTransaction arg1)
{
if(mViewPager!=null)
{
mViewPager.setCurrentItem(mTab.getPosition());
}
}

@Override
public void onTabUnselected(Tab mTab, FragmentTransaction arg1)
{

}

@Override
public void onPageScrollStateChanged(int arg0)
{

}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
{

}

@Override
public void onPageSelected(int Index)
{
//設置當前要顯示的View
mViewPager.setCurrentItem(Index);
//選中對應的Tab
mActionBar.selectTab(mTabs.get(Index));
}

}
其中,TabPagerAdapter是一個繼承自PagerAdapter的適配器類:

package com.Android.AnyViewUI;

import java.util.ArrayList;

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;

public class TabPagerAdapter extends PagerAdapter
{

private ArrayList<View> mViews;
public TabPagerAdapter(ArrayList<View> mViews)
{
this.mViews=mViews;
}

@Override
public void destroyItem(View container, int position, Object object)
{
((ViewPager)container).removeView(mViews.get(position));
}

@Override
public Object instantiateItem(View container, int position)
{
((ViewPager)container).addView(mViews.get(position), 0);
return mViews.get(position);
}

@Override
public int getCount()
{
return mViews.size();
}

@Override
public boolean isViewFromObject(View mView, Object mObject)
{
return (mView==mObject);
}

}

我們的代碼從邏輯上來講是沒有什麼問題的,但是當我們試圖運行這段代碼的時候,我們發現這段代碼出了問題,而問題就出在OnTabSelected()上。但是我們冷靜下來想了想,沒有錯啊,那麼問題到底出在哪裡呢?看到網上的朋友說,這里這個適配器應該繼承自FragmentPagerAdapter:

package com.Android.AnyViewUI;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class ViewPagerAdapter extends FragmentPagerAdapter {

//定義三個Fragment的索引
public static final int Fragment_Index_0=0;
public static final int Fragment_Index_1=1;
public static final int Fragment_Index_2=2;

public ViewPagerAdapter(FragmentManager fragmentManager)
{
super(fragmentManager);
}

@Override
public Fragment getItem(int Index)
{
Fragment mFragemnt=null;
switch(Index)
{
case Fragment_Index_0:
mFragemnt=new Fragment_0();
break;
case Fragment_Index_1:
mFragemnt=new Fragment_1();
break;
case Fragment_Index_2:
mFragemnt=new Fragment_2();
break;
}
return mFragemnt;
}

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

}


其中,Fragment_0、Fragment_1、Fragment_2是繼承自Fragment的類,由於三個布局基本一樣,這里只給出Fragment_0的代碼:

package com.Android.AnyViewUI;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment_0 extends Fragment
{

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
View mView=inflater.inflate(R.layout.layout_0, container, false);
return mView;
}

}

⑥ android fragment重新顯示會調用什麼方法

在實際開發項目中,經常用到 Fragment,並且為了復用Fragment,所以基本上就是用show()和hide方法來復用Fragment。在Fragment從隱藏到顯示,可能會做一些處理,例如數據重新請求載入等等,那麼Fragment從隱藏到顯示,會調用什麼方法呢?下面先看看具體的代碼實現:

[java] view plain
FragmentTransaction transaction = fragmentManager.beginTransaction();
Fragment fragment;//
//隱藏 Fragment
if (fragment!= null) {
transaction.hide(fragment);
}
//顯示、載入Fragment
if (fragment == null) {
// 如果fragment為空,則創建一個並添加到界面上
fragment = new AllFragment();
transaction.add(R.id.seckilling_fl, fragment);
} else {
// 如果Fragment不為空,則直接將它顯示出來
transaction.show(fragment);
}
當Fragment 從隱藏切換至顯示的時候,不會調用onResume(),Fragment 的onResume()是Fragment 和它的宿主在切換時才會調用的,而Fragment 之前切換時,不會調用onResume()方法,仔細查看發現Fragment 之前切換,Fragment 從隱藏切換至顯示,會調用onHiddenChanged(boolean
hidden)方法

⑦ 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就直接銷毀了,再按返回鍵就直接退出應用了

熱點內容
策略樹演算法 發布:2025-02-05 06:00:31 瀏覽:609
存儲光碟數據恢復 發布:2025-02-05 05:43:50 瀏覽:383
android位置信息嗎 發布:2025-02-05 05:43:45 瀏覽:439
畫師怎麼配置電腦 發布:2025-02-05 05:38:56 瀏覽:968
c語言實驗心得與小結 發布:2025-02-05 05:38:54 瀏覽:806
越南搭建伺服器 發布:2025-02-05 05:34:03 瀏覽:979
php與oracle資料庫 發布:2025-02-05 05:34:01 瀏覽:469
搶紅包Android 發布:2025-02-05 05:32:22 瀏覽:275
摩托車壓縮 發布:2025-02-05 05:23:48 瀏覽:609
access的sql語句怎麼寫 發布:2025-02-05 05:23:47 瀏覽:356