一.集合賦值問(wèn)題
一般我們從服務(wù)器請(qǐng)求到集合時(shí)一般賦值這樣,然后將數(shù)據(jù)展示到相應(yīng)的控件上。
ArrayList<String> mDataList = new ArrayList<String>();
public void getRespon(ArrayList<String> mServiceDataList) {
mDataList = mServiceDataList;
}
這樣直接操作數(shù)據(jù)源,會(huì)導(dǎo)致當(dāng)我們把mDataList集合清空的時(shí)候數(shù)據(jù)源mServiceDataList也同時(shí)清空,破壞了源數(shù)據(jù),因?yàn)閮蓚€(gè)指向的是一個(gè)地址。因此不應(yīng)該直接操作數(shù)據(jù)源。
ArrayList<String> mDataList = new ArrayList<String>();
public void getRespon(ArrayList<String> mServiceDataList) {
//1.清空下集合
mDataList.clear();
//2.添加集合
if (mServiceDataList != null) {
mDataList.addAll(mServiceDataList);
}
}
為了避免產(chǎn)生莫名其妙的問(wèn)題,因此盡量不要破壞傳過(guò)來(lái)的數(shù)據(jù)。
二.switch 不止可以判斷 int
從 Java JDK 1.7 開(kāi)始,switch 語(yǔ)句就可以開(kāi)始支持判斷 string 對(duì)象 和 enum 枚舉
public void localEquals(String testString) {
switch (testString) {
case "測(cè)試一":
break;
case "測(cè)試二":
break;
case "測(cè)試三":
break;
}
}
三. equals方法使用防止空指針
string 中 equals方法可以比較兩個(gè)內(nèi)容是否相等
public void testEquals(String testString){
"hello".equals(testString);
}
如果testString 寫(xiě)在前面
public void testEquals(String testString){
if(testString!=null){
testString.equals("hello");
}
}
第一個(gè)方法不用非空判斷,而且testString可以為空值。
四. 被 final 修飾的對(duì)象不能被修改
我們常常誤以為,被 final 修飾對(duì)象不能被修改,其實(shí)這種說(shuō)法不是完全正確的。修改這個(gè)對(duì)象的成員變量是沒(méi)有任何問(wèn)題的
public void testFinal() {
final ReportAllBean mReportAllBean=new ReportAllBean();
mReportAllBean.data="測(cè)試修改";
}
但是不能對(duì)這個(gè)對(duì)象進(jìn)行重新賦值

五.Java 子父類(lèi)相互轉(zhuǎn)換
子類(lèi)轉(zhuǎn)父類(lèi)
public void testView() {
TextView mTextView = new TextView(mActivity);
View mTextView1 = mTextView;
mTextView1.setVisibility(View.VISIBLE);
}
TextView可以轉(zhuǎn)成父類(lèi)。并且調(diào)用setVisibility方法
父類(lèi)轉(zhuǎn)子類(lèi)
public void testView() {
View mView = new View(mActivity);
TextView mTextView = (TextView) mView;
}
運(yùn)行報(bào)ClassCastException
但是findViewById好像返回的就是一個(gè)View并且可以轉(zhuǎn)換成子類(lèi)類(lèi)型
public void testView() {
View viewById = mActivity.findViewById(R.id.viewPager);
ViewPager mViewPager = (ViewPager) viewById;
}
雖然 findViewById 可以強(qiáng)轉(zhuǎn)成 View 的子類(lèi),但是本質(zhì)獲取到的還是 XML 中的那個(gè)類(lèi)型 View,XML 中是 ViewPager,findViewById 獲取到也只能是 ViewPager,如果強(qiáng)轉(zhuǎn)成 其他類(lèi)型 一定會(huì)報(bào)類(lèi)型轉(zhuǎn)換異常
父類(lèi)是可以轉(zhuǎn)成子類(lèi)的,但是有一個(gè)前提條件,那就是它本質(zhì)上就是這個(gè)子類(lèi)的對(duì)象
六.基本數(shù)據(jù)類(lèi)型和對(duì)象

基本數(shù)據(jù)類(lèi)型和對(duì)象之間有很大的區(qū)別,基本數(shù)據(jù)類(lèi)型只能是一個(gè)數(shù)值,而對(duì)象可以有變量和方法,int 的默認(rèn)值為0,而 Integer 的默認(rèn)值為 null,因?yàn)樗鼈儽旧砭褪莾煞N不同的東西
六.重寫(xiě)和重載
重寫(xiě):重寫(xiě)父類(lèi)的方法
@Override
public void onPause() {
super.onPause();
}
重載:一個(gè)類(lèi)里可以有相同方法名的方法,但是參數(shù)不同。
public void testView() {
}
public void testView(int i) {
}
七.ListView 或 RecyclerView 使用 Glide
錯(cuò)誤寫(xiě)法
Context context = MainActivity.this;
Glide.with(context)
.load(url)
.into(imageView);
正確寫(xiě)法
Glide.with(imageView.getContext())
.load(url)
.into(imageView);
Glide 使用的上下文建議用 ImageView.getContext() 的,來(lái)源于我曾經(jīng)遇到過(guò)的問(wèn)題,在 RecyclerView 中 itemView 中包含一個(gè) ImageView 對(duì)象,用于加載后臺(tái)的用戶(hù)頭像 URL,但是隨著列表的滾動(dòng),ImageView 加載的圖片會(huì)混亂起來(lái),原因是 Glide 持有 Activity 的上下文,只要 Activity 沒(méi)有 finish,Glide 就不會(huì)停止本次讀取和加載,如果使用了 ImageView 的上下文,只要 ImageView 不可見(jiàn)就會(huì)停止加載
此篇文章來(lái)源于玉剛文章《那些年,那些坑》,再加一部分自己遇到的坑。