前言
今天給大家?guī)硪黄恼率潜救嗽陂喿x網(wǎng)絡(luò)上一些比較好的項(xiàng)目的源碼時發(fā)現(xiàn)的涌矢,覺得還不錯快骗,所以就記錄下來方篮。我們平時要開啟一個activity一般都是直接
Intent intent = new Intent(this,XXXAcvitity.class);
//如果有參數(shù)
intent.putExtra("name","lxt");
startActivity(intent);
想必很多小伙伴都是這樣做的吧,這樣做看似沒什么問題匕得,但是在另外一個activity里面找參數(shù)汁掠,是不是還要回到打開他的地方找攒发,項(xiàng)目小點(diǎn)還好晋南,一旦多起來了负间,改起來就會非常麻煩,那么接下來給大家?guī)硪粋€個人認(rèn)為比較好的辦法趾访。
正文
上面也說到了扼鞋,我們?nèi)绻凑諅鹘y(tǒng)的方式做,找參數(shù)改參數(shù)的時候就會特別不方便捐友,那么怎么做呢?我們可以在需要打開的activity里面定義一個靜態(tài)方法匣砖,起名就叫start昏滴,如果需要參數(shù)猴鲫,直接在后面增加參數(shù)就好了,比如:
public class SecondActivity extends AppCompatActivity {
private static final String NAME = "NAME";
//在需要打開的activity里面定義一個方法拂共,參數(shù)列表為打開該activity需要的參數(shù)
public static void start(Context context, String name) {
Intent intent = new Intent(context,SecondActivity.class);
intent.putExtra(NAME, name);
context.startActivity(intent);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在需要用參數(shù)的地方
String name = getIntent().getStringExtra(NAME);
}
}
寫完之后匣缘,在另外一個activity打開該activity的時候就可以這么寫
SecondActivity.start(this,"lxt");
這樣寫的好處是什么呢肌厨?首先肯定是簡潔啊柑爸,不管你需不需要參數(shù)表鳍,都是一行代碼譬圣,再然后就是擴(kuò)展性強(qiáng)雄坪,比方說维哈,我們現(xiàn)在要增加一個參數(shù)了阔挠,那么我們完全可以直接在SecondActivity里面增加一個參數(shù),如果這個參數(shù)不是必須的話跪削,我們完全可以利用方法重載來完成,從而不需要修改以前的代碼狞甚,比如
//在需要打開的activity里面定義一個方法哼审,參數(shù)列表為打開該activity需要的參數(shù)
public static void start(Context context, String name) {
//調(diào)用3個參數(shù)的方法
start(context, name, 0);
}
//只需要增加一個方法,然后之前的2個參數(shù)調(diào)用3個參數(shù)的就好了
public static void start(Context context, String name, Integer age) {
Intent intent = new Intent(context,SecondActivity.class);
intent.putExtra(NAME, name);
intent.putExtra(AGE, age);
context.startActivity(intent);
}
對我們之前的代碼沒有任何影響,提高了代碼的可擴(kuò)展性春霍,而且需要什么參數(shù)址儒,什么類型一目了然莲趣,所以把這種方式推薦給大家使用喧伞。
福利
給大家?guī)硪稽c(diǎn)小福利绩郎,當(dāng)然如果大家已經(jīng)在用了就當(dāng)我沒說肋杖,findViewById()這個方法每個Android開發(fā)程序猿肯定都敲過状植,雖說現(xiàn)在有很多框架浅萧,比如XUtils洼畅,ButterKnife之類的帝簇,利用注解的方式找控件丧肴,雖說我們不用一行一行敲findViewById了芋浮,但是他們底層都是利用的反射來做的纸巷,會影響我們App的性能瘤旨,所以為了性能存哲,還是推薦大家用findViewById祟偷,這個時候大家就說修肠,findViewById還要強(qiáng)轉(zhuǎn)氛赐,蠻麻煩艰管,別著急牲芋,給大家來帶一點(diǎn)小干貨
//在我們的BaseActivity里面增加一個方法
protected <T extends View> T findView(int resId) {
return (T) (findViewById(resId));
}
//在子類中使用
TextView textview = findView(R.id.tv);
這樣用起來比我們用傳統(tǒng)的findViewById是要快一些的缸浦,當(dāng)然歹鱼,如果你還不愿意寫卜高,OK庭敦,給你們推薦一個自動生成findViewById的插件秧廉,GenerateFindViewById疼电,這里我就不演示了澜沟,想了解的小伙伴github搜就好了茫虽。