日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

谷歌电子市场开发记录(2)-框架搭建

發布時間:2024/8/1 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谷歌电子市场开发记录(2)-框架搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一篇博客說了開發前的準備工作,現在就要開始正式開發了。 在項目開發時,難免需要使用到常用的一些對象,比如說Context上下文,經常需要使用,因此,此處,可以新建一個全局的Application,將常用的一些對象先new好,以便以后直接調用。 1.新建一個GlobalApplication類,繼承Application,實現OnCreate()方法,在這個類中,需要初始化三個對象。 (1)Context mContext=getApplicationContext();上下文經常需要使用使用,因此,在此處先得到。 (2)Handler mHandler=new Handler();Handler對象在處理多線程,消息隊列時需要經常使用,此項目需要處理多線程下載,Handler更顯得至關重要。 (3)int MainThreadId=android.os.Process.myTid();獲得主線程Id,因為要處理多線程,而處理UI時,必須在主線程處理,因此,需要得到主線程Id,從而判斷某個處理是否運行在主線程 在初始化之后,提取作為全局成員,并得到get()方法。 2.為了處理UI中的一些邏輯,將一些必用的方法封裝為一個工具類。新建一個工具類UIUtils,在這個類中,封裝很多方法。 (1)根據id得到字符串,字符串數組,顏色值,顏色選擇器,圖片,尺寸值等。 (2)dp轉px,px轉dp public static int dp2px(int dp){ float density=getContext().getResourse().getDisplayMetrix().density;//獲取屏幕分辨率 return (int)(dp*density+0.5f); } public static?float px2dp(float px){ float density=getContext().getResourse().getDisplayMetrix().density;//獲取屏幕分辨率 return px/density; } (3)判斷是否位于主線程 public static boolean IsRunningMainThread(){ return getMainThreadId()==android.os.Process.myTid(); } (4)將線程拋到主線程中運行 public static void RunningMainThread(Runnable r){ if(isRunningMainThread()){ r.run(); }else{ getHandler().post(r); } } (5)加載布局 3.接下來就是對于該項目整體框架的分析 上圖就是對于界面的整體分析,可以看到,界面大體框架就是如此,現在可以分析: (1)對于ActionBar,因為此處標題欄是使用android自帶的標題欄,我們在之前已經導入v7-appcompat包,可以很好的兼容,同時,我們創建一個BaseActivity繼承ActionBarActivity,作為此項目中所有活動的基類,也就是所創建的所有活動都要繼承BaseActivity,為了美觀,可以在AndroidManifest配置文件中的application設置主題為Theme.AppCompat.Light。這樣ActionBar就設置完成。 (2)對于PagerTab(指示器),我們可以自己寫一個自定義控件,創建一個PagerTab類繼承ViewGroup,在其中設置相應屬性,其中需要些兩個狀態選擇器,一個是每一個標簽的背景按下與抬起是不一樣的,還有就是其中標簽文字,選中、按下狀態和未選中是不一樣的。在自定義控件寫好之后,剩下的就是對其的調用。 (3)最麻煩的就是ViewPager的設置,我們知道,ViewPager中裝的是一個個頁面,也就是一個個View,怎樣將一個個View放入ViewPager中,是一個問題。 我們換個角度來思考,每一個ViewPager都需要一個Adapter適配器,而viewpager的適配器有三類可以繼承,PagerAdapter,Adapter,FragmentPagerAdapter,一般我們都使用PagerAdapter,在其中實現四個未實現的方法(getCount(),instantiateItem(),isViewFromObject(),destroyItem()),這個方法確實可以,但是總感覺用起來非常麻煩,Adapter是父類,一般我們都會使用它的子類來繼承,那么,我們考慮一下FragmentPagerAdapter是否可以,我們知道FragmentPagerAdapter是PagerAdapter中的其中一種實現。它將每一個頁面表示為一個?Fragment,并且每一個Fragment都將會保存到fragment manager當中。而且,當用戶沒可能再次回到頁面的時候,fragment manager才會將這個Fragment銷毀。

這種pager十分適用于有一些靜態fragment,例如一組tabs,的時候使用。每個頁面對應的Fragment當用戶可以訪問的時候會一直存在內存中,但是,當這個頁面不可見的時候,view hierarchy將會被銷毀。這樣子會導致應用程序占有太多資源。當頁面數量比較大的時候,建議使用?FragmentStatePagerAdapter

當使用FragmentPagerAdapter的時候,ViewPager一定要使用正確的ID set

FragmentPagerAdapter的子類只要實現?getItem(int)??getCount()方法。

由此我們可以認定,在此種情況下,選用FragmentPagerAdapter是最好,那么問題就來了,在getItem()方法中需要返回一個Fragment對象,而此處又有多個頁面,需要多個Fragment,該返回哪個fragment呢?

這里有幾個解決辦法,第一種就是使用HashMap將每個初始化后的Fragment對象存儲起來,然后再通過hashmap.get(pos)得到相應的Fragment;第二種就是使用工廠設計模式,生產出一個一個的Fragment。現在考慮這兩種方法的優劣:

第一種方法需要在開始時就要初始化所有的Fragment,但是我們想要的卻是當ViewPager滑到哪一個頁面,哪一個Fragment才被初始化,這樣會大大節省內存,而第二種方法就解決了這個問題。

我們可以創建一個BaseFragment作為每一個頁面的基類,因為這幾個頁面有相似之處,可以在基類就顯示出(相似之處在后面會提到),在工廠類中可以根據ViewPager的位置來選擇初始化何種界面。

public class FragmentFactroy {private static HashMap<Integer,BaseFragment> hashMapfragment=new HashMap<Integer,BaseFragment>(); public static BaseFragment createFragment(int pos){BaseFragment baseFragment=hashMapfragment.get(pos); if (baseFragment==null){switch (pos){case 0:baseFragment=new HomeFragment(); break; case 1:baseFragment=new AppFragment(); break; case 2:baseFragment=new GameFragment(); break; case 3:baseFragment=new SubjectFragment(); break; case 4:baseFragment=new RecommendFragment(); break; case 5:baseFragment=new CategoryFragment(); break; case 6:baseFragment=new HotFragment(); break; default:break; }}hashMapfragment.put(pos,baseFragment); return baseFragment; }}

工廠類創建完成之后,在ViewPager適配器的getItem()方法中直接調用,BaseFragment fragment=FragmentFactroy.createFragment(pos);然后返回fragment就可以了。至此ViewPager的填充問題就解決了。 由此,我們可以看出,此項目的大體框架就是使用Fragment填充ViewPager,在MainActivity中的布局文件中直接使用PagerTab和ViewPager來填充布局。

總結

以上是生活随笔為你收集整理的谷歌电子市场开发记录(2)-框架搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。