最近开始重新走上了android原生开发之路,本来满怀希望,今天应该是第五天,我只想说,好难。
虽然只有短短四五天,但是踩过的坑绝对想象不到,简单写写能想起来的坑们。
1号无底洞:
由于自己去官网下了一个最新版的studio,导别人的项目就没成功过,只能选择自己从头写了。
2号无底洞:
添加到FragmentPagerAdapter及其子类里的列表,每个都不能为空。
我在这里添加了一堆fragment,list里的fragment每个都不能为null。
3号无底洞:
在写viewPager时,写了一个viewPager的子类
重写了其中的setScanScroll方法,重新设置isCanScroll的值
viewPager.setScanScroll(false);去掉滑动效果
4号无底洞:
startActivityForResult(intent, 1);
当打开新的activity并想与其通信,用这个玩意,然后重写方法
onActivityResult(int requestCode, int resultCode, Intent data)
resultCode是新打开的activity.this.setResult(RESULT_OK, intent)中的RESULT_OK,RESULT_OK的值为-1;
data是新打开的activity.this.setResult(RESULT_OK, intent)中的intent。
注意:
此处有个坑坑,举个例子:
我用MainActivity做了一个app的首页,其中就有底部导航栏,于是用到了几个fragment,并且还重写了onActivityResult方法;
我在fragment中又打开了新的activity,想与其进行交互,此时新的activity中setResult并关闭自己以后,MainActivity的onActivityResult方法首先被触发,执行完MainActivity的onActivityResult方法后,再去执行fragment的onActivityResult方法。
这其中还有一个问题:在fragment中的startActivityForResult方法中定义的标识(第二个值),在MainActivity的onActivityResult方法中的resultCode并不是最初定义的标识,这个数怎么来的我也不清楚,不过执行到fragment的onActivityResult方法的resultCode是最初定义的标识。
5号无底洞:
fragment的setUserVisibleHint方法可以实现数据的重新初始化,不过需要注意的是setUserVisibleHint优先级巨高,早于onCreated方法,所以如果在setUserVisibleHint中调用重新初始化数据的方法会出现空指针、getActivity为空等情况,此时可以重新定义或者判断一个在onCreated或onCreatedView方法中会初始化的一个对象是否为空来决定是否调用初始化数据的方法。
6号无底洞:
关于配置文件.properties文件的配置,先瞅瞅目录
1、assets文件夹创建
2、新建.properties文件,文件中写键值对
3、读取配置文件方法,我起的名字叫config.properties
import android.app.Application;
import android.content.Context;
import java.io.IOException;
import java.util.Properties;
/**
* 配置文件读取
*/
public class AppConfigApplication extends Application {
private String TAG = "TAG";
public static AppConfigApplication appConfigApplication;
public static AppConfigApplication getInstance(){
if(appConfigApplication == null){
appConfigApplication = new AppConfigApplication();
}
return appConfigApplication;
}
public String getValue(Context context, String key) {
String value = "";
Properties config = new Properties();
try {
config.load(context.getAssets().open("config.properties"));
value = config.getProperty(key);
} catch (IOException e) {
e.printStackTrace();
}
return value;
}
}
4、用起来~
AppConfigApplication.getInstance().getValue(getActivity(), "键")
还有无数的小坑想不起来了。