求本Android《第二行代码天气项目》的pdf,谢谢!

这个文档算不上是原创,因为主要援引的是《第二行代码》(第一行代码‘第二版’)。其实人家的名字就是括号里的,但是作者郭霖都说他更喜欢叫第二行代码。再加上我也想,因为毕竟敲了这么久的第一行代码,现在也该让我写到的二行了吧,
话不多说,本文档仅是为了在我学习过第二行代码之后能够有效联系一下,所以究竟这个文档能够给大家多少益处,我也不好说。但是如果你也在学习这本书,而且有些代码懒得敲我倒是欢迎拿来主义。
Chapter1主要讲解的是创建第一个项目,无非是HelloWorld,俗话说,万事开头难,但是我们软件人不一样,万事先从简单的开始,循序渐进。而且第一章的那些gradle,imi啊,让我写也是直接照抄,就目前看来,我们需要简单理解,可以先不求甚解。
Chapter2直接是本文主题,探究活动——
一、手动创建活动啊,加载布局,这些大家肯定没毛病。我就把我学过的第二章能够想到的问题在这里显示了哈,所以跟书上的顺序可能略有不同。
Pic1初始创建之后的结构
&resources&
&string name="app_name"&ForChapter2&/string&
&string name="btnForToast"&TestToast&/string&
&string name="btnForFormal"&TestFormal&/string&
&string name="btnForDialog"&TestDialog&/string&
&/resources&
图一是直接一路点下创建的,注意一开始要选Empty Activity,不要选那个Basic Activity,不然他会默认给你添加很多东西,不适合咱们这些初学者。
我把一会可能出现的名字先写在了values目录下的strings.xml(code1),这么做的好处是提高了代码的重用性,不用每次都在重新敲一遍,这里也支持中文滴。
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.david.forchapter2.MainActivity"&
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnForToast"
android:text="@string/btnForToast"/&
&/LinearLayout&
二、在这里把相对布局改为了线性(code2),这貌似也是这本书特别常用的。需要注意的是,线性布局需要指定orientation,即整体布局的方向是水平的还是垂直的。
然后便添加了一个Button用来测试,修改MainAcitivity ,oncreate中添加
Button btnToast = (Button)findViewById(R.id.btnForToast);
btnToast.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Toast.makeText(MainActivity.this,"ToastButton",Toast.LENGTH_LONG).show();
那么书上的是Toast.LENGTH_SHORT,我们不妨改为long,希望效果和我们想象的一样。(code3)
哈哈,果然没错,把截屏的时间都给我啦,所以根据实际情况使用toast吧。
突然发现,原来在这里设置menu的代码时也可以预览,真是nice啊。如上图,我们可以看到在这里设置了一个menu框,感觉这个还是蛮常用的,例如添加个联系人之类的,可以把那个变成个加号,然后进行一些操作。
需要注意的是
// 将书写的menu显示出来
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
// 为menu设置监听事件
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.Add:
Toast.makeText(this,"you click add",Toast.LENGTH_SHORT).show();
case R.id.Delete:
Toast.makeText(this,"you click remove",Toast.LENGTH_SHORT).show();
return true;
在这里写完的menu不会被立即应用到主应用,而是需要在MainActivity进行一下说明(code4)。
这两个方法可以直接按CTRL+O显示出来方法列表中添加。
四、访问互联网
case R.id.btnForBrowser:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(""));
startActivity(intent);
对下一个Button在MainActivity如此设置,就可以令其实现访问百度了。
而将ACTION_VIEW改成ACTION_DIAL,Uri.parse括号里的是"tel:10086"。
就能让用户直接跳转到拨打电话界面,感觉这几个功能还是挺有用的,也比较好实现。
五、传递数据
接下来我们来测试一下传递值,如何在Activity之间传递值是每一个安卓程序开发员都需要掌握的,所以在这里我们用了一个按钮和一个EditText,ET去获取到用户的输入,然后传递到下一个activity的textView,所以我们还需要在创建一个Activity,选择Empty Activity就好。
case R.id.btnForFormal:
String data = editFormal.getText().toString();
Intent intentForDataPass = new Intent(MainActivity.this,PassData.class);
intentForDataPass.putExtra("Pass",data);
startActivity(intentForDataPass);
code6主Activity中获取EditText中的内容并传递
public class PassData extends AppCompatActivity {
TextView tvForF
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pass_data);
tvForFormal= (TextView)findViewById(R.id.textForDataPass);
Intent intent = getIntent();
String a = intent.getStringExtra("Pass");
tvForFormal.setText(a);
code7是接收数据的,如下图
生命周期是通过在控制台输出字符来观测的,具体就不再写一遍了
值得一提的是,如果Button较多的话,采用主class implements OnClickListener的接口来说会比较爽。
附上完全的Java代码,布局的就像上图一样。
//MainActivity.java
package com.example.david.forchapter2;
import android.content.I
import android.net.U
import android.support.v7.app.AppCompatA
import android.os.B
import android.view.M
import android.view.MenuI
import android.view.V
import android.widget.B
import android.widget.EditT
import android.widget.T
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button btnT
Button btnB
Button btnF
EditText editF
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnToast = (Button)findViewById(R.id.btnForToast);
btnToast.setOnClickListener(this);
btnBrowser = (Button)findViewById(R.id.btnForBrowser);
btnBrowser.setOnClickListener(this);
btnFormal = (Button)findViewById(R.id.btnForFormal);
btnFormal.setOnClickListener(this);
editFormal = (EditText)findViewById(R.id.editForDataPass);
// 将书写的menu显示出来
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
// 为menu设置监听事件
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.Add:
Toast.makeText(this,"you click add",Toast.LENGTH_SHORT).show();
case R.id.Delete:
Toast.makeText(this,"you click remove",Toast.LENGTH_SHORT).show();
return true;
public void onClick(View view) {
switch (view.getId()){
case R.id.btnForToast:
Toast.makeText(MainActivity.this,"ToastButton",Toast.LENGTH_LONG).show();
case R.id.btnForBrowser:
Intent intentForBrowser = new Intent(Intent.ACTION_VIEW);
intentForBrowser.setData(Uri.parse(""));
startActivity(intentForBrowser);
Intent intentForBrowser = new Intent(Intent.ACTION_DIAL);
intentForBrowser.setData(Uri.parse("tel:10086"));
startActivity(intentForBrowser);
case R.id.btnForFormal:
String data = editFormal.getText().toString();
Intent intentForDataPass = new Intent(MainActivity.this,PassData.class);
intentForDataPass.putExtra("Pass",data);
startActivity(intentForDataPass);
//DataPass.java
package com.example.david.forchapter2;
import android.content.I
import android.support.v7.app.AppCompatA
import android.os.B
import android.widget.TextV
public class PassData extends AppCompatActivity {
TextView tvForF
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pass_data);
tvForFormal= (TextView)findViewById(R.id.textForDataPass);
Intent intent = getIntent();
String a = intent.getStringExtra("Pass");
tvForFormal.setText(a);
阅读(...) 评论() &&>&第二行代码PDF
第二行代码PDF
上传大小:52.7MB
第二行代码高清PDF
综合评分:3.6(5位用户评分)
所需积分:
下载个数:161
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有5条
是第二版,但不清晰
还是很不错的
虽然图片不是很清楚
确实是第二版,编译工具已经换成AS了。不过是扫描版,图片质量很糟
是真的第二版,不过是扫描的,图片有些不清晰,还是黑白的,不过文字很清晰。
假的,根本就是第一行代码。。。
审核通过送C币
微信商城专辑
创建者:velada
Android初学者
创建者:haicheng20
android图表控件和RecyclerView相关demo
创建者:huchengzhiqiang
上传者其他资源上传者专辑
移动开发热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
第二行代码PDF
会员到期时间:
剩余下载个数:
剩余C币:0
剩余积分:6726
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
第二行代码PDF&>&第二行代码第二版(源码和pdf)
第二行代码第二版(源码和pdf)
上传大小:66.97MB
第二行代码第二版(源码和pdf),好东西,需要分享一下,希望能帮助到大家
综合评分:4(4位用户评分)
所需积分:
下载个数:67
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有4条
不错啊,一行二版
确实是第二版,很不错的,作者花费了很大的努力才写出来的,辛苦了。
假的,根本不是第二行代码,是第一行代码第二版,坑
不错,确实是第二版的,买了第一版看快完了才知道原来有第二版,真是蛋疼无比啊。
审核通过送C币
微信商城专辑
创建者:velada
Android初学者
创建者:haicheng20
android图表控件和RecyclerView相关demo
创建者:huchengzhiqiang
上传者其他资源上传者专辑
Android Studio SDK Build-tools, revision 25.0.2
Refactoring Improving the Design of Existing Code(中文版) 超清目錄版
Gson 2.3.1
Android 5的framework-res.apk
IC卡标准ISO7816中文完整版.rar
移动开发热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
第二行代码第二版(源码和pdf)
会员到期时间:
剩余下载个数:
剩余C币:0
剩余积分:6726
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
第二行代码第二版(源码和pdf)

我要回帖

更多关于 第二行代码郭霖 pdf 的文章

 

随机推荐