投资理财页面实现—金融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.

猜你喜欢

转载自blog.csdn.net/liusaisaiV1/article/details/106295610