学习《第一行代码Android》(郭霖著)过程中遇到的问题及解惑总结
1.隐式Intent其他用法无法选择URL的打开方式(P48)【未解决】
问题描述:
<activity android:name=".ThirdActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http"/>
</intent-filter>
</activity>
(以上为书上的原代码)
但是使用书上的代码会报错,需要加上一段,修改后如下:
<activity android:name=".ThirdActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http"/>
</intent-filter>
</activity>
然而,即便不报错,程序运行之后并不会出现如下选择应用通知
2.使用Intent返回值给上一个应用(P52)【已解决】
重写onActivityResult()的原代码如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode){
case 1:
if(resultCode==RESULT_OK){
String returnedData=data.getStringExtra("data_return");
Log.d("FirstActivity",returnedData);
}
break;
default:
}
}
(原代码)
但需要修改成如下代码才可正常运行:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode){
case 1:
if(resultCode==RESULT_OK){
String returnedData=data.getStringExtra("data_return");
Log.d("FirstActivity",returnedData);
}
break;
default:
}
super.onActivityResult(requestCode, resultCode, data);
}
(修改后)
3.使用Intent结合Bundle传值 (P63)【已解决】
这种传值方式书上只是简单提到,以下为个人尝试实例:
意图为在“MainActivity”的基础上,通过Bundle结合Intent传值给一个新的名为“BundleActivity”的空活动,方法写在MainActivity界面的Button点击事件内:
startBundleActivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle pacadge=new Bundle();
String tempData="nihao a!";
pacadge.putString("data_key",tempData);
Intent intent=new Intent(MainActivity.this,BundleActivity.class);
intent.putExtra("123",pacadge);
startActivity(intent);
}
});
(MainActivity)
同时在BundleActivity中写入接受及解读Bundle代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bundle);
Intent intent=getIntent();
Bundle bundle=intent.getBundleExtra("123");
Log.d("Hello",bundle.getString("data_key"));
}
}
(BundleActivity)
需要注意的是,该种传值方式会涉及到两个键值,在本实例中,Bundle存储信息的键值命名为“data_key”,同时Intent存储bundle的键值名为“123”,不要混淆。
4.gradle闭包中添加依赖库报错【已解决】
在使用RecycleView中我们要先在gradle中添加支持文件:
但是会出现如上报错,原因有两个
1)书上的版本较低,使用的是compile,但在现在的版本中使用的是Implementation.
2)SDK版本不符,我的机器安装的是29的sdk,然而代码是24的:
对此,直接修改为机器的版本即可:
由于版本问题,在编写XML时,书上的代码仍是过时的,建议输入关键字直接按照它自动提示的样式打。
例如(P122 RecyclerView):
Notice:
1.强烈建议在sync之后清缓存重启一次然后再编写xml引用该控件,重启方法如下:
5.图片放入drawable的注意事项【已解决】
drawable中的资源必须是小写的,不能有大写字母或者全是数字,如图:
改为小写并替换数字即可: