項目實戰:硅谷金融APPday04投資理財頁面實現
不否認努力,繼續加油!
學習整理重點、盲區,筆記如下:乾乾巴巴,麻麻賴賴,一點都不圓潤……
day04
內容
1. 投資模塊佈局的設置
- 效果圖如下:
- 規劃:上面是:TabPageIndicator;下面是:ViewPager + 3個Fragment;
2. ViewPager+FragmentPagerAdapter顯示投資整體模塊數據
-
InvestFragment.java
public class InvestFragment extends BaseFragment { …… @Override protected void initData(String content) { //1.加載三個不同的Fragment: initFragments(); //2.ViewPager設置三個Fragment的顯示 MyAdapter adapter = new MyAdapter(getFragmentManager()); vpInvest.setAdapter(adapter); //將TabPagerIndicator與ViewPager關聯 tabpageInvest.setViewPager(vpInvest); } private List<Fragment> fragmentList = new ArrayList<>(); private void initFragments() { ProductListFragment productListFragment = new ProductListFragment(); //添加到集合中 fragmentList.add(productListFragment); } /** * 提供PagerAdapter的實現 * 如果ViewPager中加載的是Fragment,則提供的Adpater可以繼承於具體的:FragmentStatePagerAdapter或FragmentPagerAdapter * FragmentStatePagerAdapter:適用於ViewPager中加載的Fragment過多,會根據最近最少使用算法,實現內存中Fragment的清理,避免溢出 * FragmentPagerAdapter:適用於ViewPager中加載的Fragment不多時,系統不會清理已經加載的Fragment。 */ class MyAdapter extends FragmentPagerAdapter { public MyAdapter(FragmentManager fm) {super(fm);} @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList == null ? 0 : fragmentList.size(); } //提供TabPageIndicator的顯示內容 @Override public CharSequence getPageTitle(int position) { return UIUtils.getStringArr(R.array.invest_tab)[position]; } } ……
-
strings.xml
<resources> <string name="app_name">硅谷金融</string> <string-array name="invest_tab"> <item>全部理財</item> <item>推薦理財</item> <item>熱門理財</item> </string-array> </resources>
-
設置 TabPageIndicator 的主題:
功能清單文件:<activity android:name=".activity.MainActivity" android:theme="@style/StyledIndicators" />
style.xml
<style name="StyledIndicators" parent="@android:style/Theme.Light"> <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item> <item name="android:windowNoTitle">true</item> </style> <style name="CustomTabPageIndicator" parent="Widget.TabPageIndicator"> <item name="android:background">@drawable/tab_indicator</item> <item name="android:textAppearance">@style/CustomTabPageIndicator.Text</item> <item name="android:textSize">18sp</item> <item name="android:dividerPadding">8dp</item> <item name="android:showDividers">middle</item> <item name="android:paddingLeft">10dp</item> <item name="android:paddingRight">10dp</item> <item name="android:fadingEdge">horizontal</item> <item name="android:fadingEdgeLength">8dp</item> </style> <style name="CustomTabPageIndicator.Text" parent="android:TextAppearance.Medium"> <item name="android:typeface">monospace</item> <item name="android:textColor">@drawable/selector_tabtext</item> </style>
-
爲保證主題有效;
加載視圖的上下文參數,最好選擇 activity,而非application;
3. Context的理解:
- 理解;
- 使用“ Context ”的兩個場景;
- 調用 Context 下的相關方法:
- 將context作爲實參傳入;
- context最主要的功能是加載和訪問資源;
- 子類;
- 區別;
- 選擇 Activity 還是 getApplicationContext()?
4. 顯示"全部理財"模塊數據
-
效果圖如下:上邊是個實現了跑馬燈效果的 TextView,下邊是 TextView;
-
跑馬燈 TextView 實現:
TextView只有在獲取焦點後纔會滾動顯示隱藏文字,- 佈局文件中,添加
android:ellipsize="marquee" android:singleLine="true"
- 方式一:在 代碼中獲取焦點:
tv.setFocusable(true); tv.setFocusableInTouchMode(true); tv.requestFocus();
- 方式二:自定義繼承於TextView的控件,並重寫 isFocused() 方法,返回true,可設置跑馬燈無限循環,一直“跑”
@Override public boolean isFocused() { return true; }
- 佈局文件中,添加
-
小插曲:如何在ListView中展示不同佈局的item
-
需要BaseAdapter中重寫如下的方法:
//返回類型佈局的個數 @Override public int getViewTypeCount() { return 2; } //返回每個位置上的類型 @Override public int getItemViewType(int position) { if(position == 0){ return 0; }else{ return 1; } }
-
並在 getView() 中對不同樣式進行處理
int itemViewType = getItemViewType(position); if (itemViewType == 0) { TextView tv = new TextView(parent.getContext()); tv.setText("與子同行,奈何覆舟"); tv.setTextColor(UIUtils.getColor(R.color.text_progress)); tv.setTextSize(UIUtils.dp2px(20)); return tv; } //將沒有添加這個item時,後面的item正常顯示,這裏用的是 -- if (position > 3) { position--; }
-
在 ListView 中添加分割線;
android:divider="@color/title_text" android:dividerHeight="10dp"
-
盲區
- 聲明:本博客根據尚硅谷項目實戰: 硅谷金融.學習整理;
- 對於 application 和 Context 的認識不深入;
- 對於服務的使用都忘了;
- 對於 fragment 的生命週期沒有太多考慮,不熟悉;
其他筆記
金融App
- 金融APP01—頁面架構.
- 金融APP02—主頁及工具類創建
- 金融APP03—自定義 MyScrollView & 聯網加載數據的4種狀態的抽取及代碼優化
商城
Android項目實戰—— 商城APP.
新聞
Android項目實戰—— 新聞APP.