投資理財頁面實現—金融APP04


不否認努力,繼續加油!
學習整理重點、盲區,筆記如下:乾乾巴巴,麻麻賴賴,一點都不圓潤……

day04

內容

1. 投資模塊佈局的設置

  1. 效果圖如下:
  2. 規劃:上面是:TabPageIndicator;下面是:ViewPager + 3個Fragment;
    在這裏插入圖片描述

2. ViewPager+FragmentPagerAdapter顯示投資整體模塊數據

  1. 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];
    	    }
    	}
    	……
    
  2. strings.xml

    <resources>
        <string name="app_name">硅谷金融</string>
        <string-array name="invest_tab">
            <item>全部理財</item>
            <item>推薦理財</item>
            <item>熱門理財</item>
        </string-array>
    </resources>
    
  3. 設置 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>
    
  4. 爲保證主題有效;
    加載視圖的上下文參數,最好選擇 activity,而非application;

3. Context的理解:

“ Context ” 還有什麼值得研究?.

  1. 理解;
  2. 使用“ Context ”的兩個場景;
  3. 調用 Context 下的相關方法:
  4. 將context作爲實參傳入;
  5. context最主要的功能是加載和訪問資源;
  6. 子類;
  7. 區別;
  8. 選擇 Activity 還是 getApplicationContext()?

4. 顯示"全部理財"模塊數據

  1. 效果圖如下:上邊是個實現了跑馬燈效果的 TextView,下邊是 TextView;
    在這裏插入圖片描述

  2. 跑馬燈 TextView 實現:
    TextView只有在獲取焦點後纔會滾動顯示隱藏文字,

    1. 佈局文件中,添加
      android:ellipsize="marquee"
      android:singleLine="true"
      
    2. 方式一:在 代碼中獲取焦點:
      tv.setFocusable(true);
      tv.setFocusableInTouchMode(true);
      tv.requestFocus();
      
    3. 方式二:自定義繼承於TextView的控件,並重寫 isFocused() 方法,返回true,可設置跑馬燈無限循環,一直“跑”
      @Override
      public boolean isFocused() {
          return true;
      }
      
  3. 小插曲:如何在ListView中展示不同佈局的item

    1. 需要BaseAdapter中重寫如下的方法:

      //返回類型佈局的個數
      @Override
      public int getViewTypeCount() {
          return 2;
      }
      //返回每個位置上的類型
      @Override
      public int getItemViewType(int position) {
        	if(position == 0){
              return 0;
        	}else{
              return 1;
        	}
      }
      
    2. 並在 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--;
      }
      
    3. 在 ListView 中添加分割線;

      android:divider="@color/title_text"
      android:dividerHeight="10dp" 
      

盲區

  1. 聲明:本博客根據尚硅谷項目實戰: 硅谷金融.學習整理;
  2. 對於 application 和 Context 的認識不深入;
  3. 對於服務的使用都忘了;
  4. 對於 fragment 的生命週期沒有太多考慮,不熟悉;

其他筆記

金融App

  1. 金融APP01—頁面架構.
  2. 金融APP02—主頁及工具類創建
  3. 金融APP03—自定義 MyScrollView & 聯網加載數據的4種狀態的抽取及代碼優化

商城

Android項目實戰—— 商城APP.

新聞

Android項目實戰—— 新聞APP.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章