总结篇!

吭哧吭哧了三天,最近不断研究《第一行代码:第二版》170多页的那个新闻实践项目,虽然也没有用到数据库和一些Web爬虫的知识,新闻数据都是随机生成的字符串。。。。。。

但还是很开心啊!!!!!!!!!!!!

成功的分离了大尺寸和小尺寸的设备的显示。

总而言之,练习了碎片,活动,最最基本的组件,还有RecycleView。


其中最让我头疼的就是活动、活动布局、碎片、碎片布局的联系了有没有!

哦对,还有更头疼的,就是那个RecycleView的用法,简直爆炸。话不多说,快记录一下,不然一会又忘了。。。。。。

一、活动、活动布局、碎片、碎片布局的联系

就是这个图!嘿嘿,自己总结的,很明白,转载请注明!

1.活动通过布局文件名调用布局

public class MainActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

2.3.布局文件上面注明碎片,且<碎片></碎片>引用碎片类。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/news_title_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"> <fragment
android:id="@+id/news_title_fragment"
android:name="com.liwenchi.fragmentbestpractice.NewsTitleFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </FrameLayout>

4.碎片类引用碎片布局文件

public class NewsContentFragment extends Fragment {

    private View view;

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.news_content_frag, container, false);
return view;
}
}

恩,就是这样滴。

二、RecycleView的用法

 public class NewsTitleFragment extends Fragment {

     private boolean isTwoPane;

     public List<News> getNews() {

         List<News> newsList = new ArrayList<>();

         for(int i=1;i<=50;i++)
{
News news = new News();
news.setTitle("This is news title "+i);
news.setContent(getRandomLengthContent("This is news content "+ i));
newsList.add(news);
}
return newsList;
} private String getRandomLengthContent(String content) {
Random random = new Random();
int length = random.nextInt(20) + 1;
StringBuilder builder = new StringBuilder();
for(int i=0;i<length;i++)
{
builder.append(content+"\n");
}
return builder.toString();
} //真正开始的代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.news_title_frag, container, false);
//加载RecycleView
RecyclerView newsTitleRecyclerView = (RecyclerView) view.findViewById(R.id.news_title_recycler_view);
newsTitleRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
newsTitleRecyclerView.setAdapter(new NewsAdapter(getNews())); return view;
} @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(getActivity().findViewById(R.id.news_content_layout) != null)
{
isTwoPane = true;
}
else
{
isTwoPane = false;
}
} class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> { private List<News> mNewList; //构造方法
public NewsAdapter(List<News> newsList) {
mNewList = newsList;
} //自定义RecycleView的内容
class ViewHolder extends RecyclerView.ViewHolder {
//有一个Textview
TextView newsTitleText; public ViewHolder(View view) {
super(view);
newsTitleText = (TextView) view.findViewById(R.id.news_title);
}
}
//实例化每一项
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item, parent, false);
//把每一项view(TextView)实例化为一个ViewHolder
final ViewHolder holder = new ViewHolder(view);
//为每一个view绑定监听事件
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
News news = mNewList.get(holder.getAdapterPosition());
if(isTwoPane)
{
NewsContentFragment newsContentFragment = (NewsContentFragment) getFragmentManager().findFragmentById(R.id.news_content_fragment);
newsContentFragment.refresh(news.getTitle(), news.getContent());
}
else
{
NewsContentActivity.actionStart(getActivity(), news.getTitle(), news.getContent());
}
}
});
return holder;
}
//绑定每一个ViewHolder,因为这里有position参数。
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
News news = mNewList.get(position);
holder.newsTitleText.setText(news.getTitle());
}
//RecycleView项的数量
@Override
public int getItemCount() {
return mNewList.size();
}
}
}

[2017-7-27]Android Learning Day5的更多相关文章

  1. 团队作业4——第一次项目冲刺(Alpha版本)2017.4.27

    2017.04.27 天气阴沉 小雨. 时间:上午 9:35 ---10:10分 地点:陆大314实验室 会议内容:每天充分利用好大课间的时间,今天对昨天的的细节问题进行了讨论及方法更正.时间不等人这 ...

  2. Loj #6073.「2017 山东一轮集训 Day5」距离

    Loj #6073.「2017 山东一轮集训 Day5」距离 Description 给定一棵 \(n\) 个点的边带权的树,以及一个排列$ p\(,有\)q $个询问,给定点 \(u, v, k\) ...

  3. 「2017 山东一轮集训 Day5」苹果树

    「2017 山东一轮集训 Day5」苹果树 \(n\leq 40\) 折半搜索+矩阵树定理. 没有想到折半搜索. 首先我们先枚举\(k\)个好点,我们让它们一定没有用的.要满足这个条件就要使它只能和坏 ...

  4. Android开发环境的配置2017.05.27

    关于配置Android开发环境请参考此链接:http://blog.chinaunix.net/uid-25434387-id-461933.html

  5. Android Learning:数据存储方案归纳与总结

    前言 最近在学习<第一行android代码>和<疯狂android讲义>,我的感触是Android应用的本质其实就是数据的处理,包括数据的接收,存储,处理以及显示,我想针对这几 ...

  6. [2017-8-02]Android Learning Day8

    自定义动画效果 新建一个customAnim类 package com.liwenchi.myapplication; import android.view.animation.Animation; ...

  7. [2017-7-26]Android Learning Day4

    RecycleView 恩,学习Fragment的过程中的一个小实践居然用到了RecycleView!坑了我好久有木有!!好气哦,从昨晚到现在.(现在也还是一头雾水,不过照搬也会用了) 这是第一版的代 ...

  8. Android Learning:微信第三方登录

    这两天,解决了微信第三方授权登录的问题,作为一个新手,想想也是一把辛酸泪.我想着,就把我的遇到的坑给大家分享一下,避免新手遇到我这样的问题能够顺利避开. 步骤一 微信开发者平台 我开始的解决思路是,去 ...

  9. Android Learning:多线程与异步消息处理机制

    在最近学习Android项目源码的过程中,遇到了很多多线程以及异步消息处理的机制.由于之前对这块的知识只是浅尝辄止,并没有系统的理解.但是工程中反复出现让我意识到这个知识的重要性.所以我整理出这篇博客 ...

随机推荐

  1. mysql备份(导出)数据库,并恢复数据

    导出某个数据库数据到文件中 假设要导出test这个数据库,那么可以在Linux命令行(不是在mysql中) [root@ubuntu /data]# mysqldump -uroot -p test ...

  2. LR 两种html与url录制

    一直在使用LR,对于Html_based script和Url-based script 两种录制方式之间,要如何选择,仍是一知半解.最近测试时遇到同样的业务功能,两种录制方式的脚本,单次执行时间差别 ...

  3. [转帖]TLS 1.3 VS TLS 1.2,让你明白 TLS 1.3 的强大

    TLS 1.3 VS TLS 1.2,让你明白 TLS 1.3 的强大 https://www.jianshu.com/p/efe44d4a7501?utm_source=oschina-app 又拍 ...

  4. LLVM的安装

    1. 官网下载 llvm 2. 官网下载cmake 3. configure 执行 llvm 发现报错 4. 解压缩 cmake 5.将cmake 下面的bin 目录放到环境变量里面去 6. 创建一个 ...

  5. vue cli3 vue.config.js 配置详情

    module.exports = {   // 基本路径   baseUrl: process.env.NODE_ENV === 'production'     ? '/'     : '/',   ...

  6. 对于修改jsp页面后页面不发生变化的解决方法

    1.清除 Tomcat 6.0\work\Catalina\localhost 里面这个工程的内容:2.清除 Tomcat 6.0 webapps 里面的这个工程内容,然后重新部署,重启服务器:3.清 ...

  7. Django--CRM--一级, 二级 菜单表

    一. 一级菜单表 1. 首先要修改权限表的字段, 在权限表下面加上icon和 is_menu 的字段 2. 展示结果 # 我们既然想要动态生成一级菜单,那么就需要从数据库中拿出当前登录的用户的菜单表是 ...

  8. python之路--面向对象-成员

    一 . 成员 在类中你能写的所有内容都是类的成员 class 类名: # 方法 def__init__(self, 参数1, 参数2...): # 属性变量 self.属性1 = 参数1 self.属 ...

  9. SQL Server 数据库try catch 存储过程

    SQL Server 在生产环境中这样写存储过程的坑都避免了吗? 原文链接: http://www.cnblogs.com/chenmh/p/7856777.html 概述 最近因为业务的需求写了一段 ...

  10. 实现纯英文string的逆序输出

      第一种方法: using namespace std; void Reverse(string &a) { int n = a.size(); char b; ;i<n/;i++) ...