项目实战:硅谷金融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.