開源框架:fragmentargs 的優勢和使用方法

/**轉帖註明出處*/

 FragmentArgs開源庫的地址:https://github.com/sockeqwe/fragmentargs

    FragmentArgs是一個輕量級的開源庫,他用來爲你的Frgament生成準確java代碼,這個庫使用簡單。下邊是使用FragmentArgs的示例代碼:


 

import com.hannesdorfmann.fragmentargs.FragmentArgs;

import com.hannesdorfmann.fragmentargs.annotation.Arg;

 

public class MyFragment extends Fragment {

 

@Arg

int id;

 

@Arg

String title;

 

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

FragmentArgs.inject(this); // read @Arg fields

}

 

@Override

public View onCreateView(LayoutInflater inflater,

ViewGroup container, Bundle savedInstanceState) {

 

Toast.makeText(getActivity(), "Hello " + title,

Toast.LENGTH_SHORT).show();

}

}

 大家會明顯的發現使用FragmentArgs後我們少寫了很多代碼,這就是FrgamentArgs的強大之處。FragmentArgs會爲你的Fragment中的註解屬性生成樣板代碼。在你的Activity中你將使用FragmentArgs生成的Builder類代替new MyFragment(int id,String title)或靜態的MyFragment.newInstance(int id,String title)方法。示例代碼如下:


 

public class MyActivity extends Activity {

 

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

 

int id = 123;

String title = "test";

 

// Using the generated Builder

Fragment fragment =

new MyFragmentBuilder(id, title)

.build();

 

// Fragment Transaction

getFragmentManager()

.beginTransaction()

.replace(R.id.container, fragment)

.commit();

}

 

}

你可能注意到Fragment的onCreate()方法裏邊的FragmentArgs.inject(this)語句。當調用該語句的時候FragmentArgs將會爲你的Fragment生成相應的代碼。你可能會問那我是不是必須要在我的每一個Fragment的onCreate方法裏邊都要調用這個方法呀?你並不需要在你的每一個Fragment的onCreate方法裏邊都調用這個語句,FragmentsArgs.inject(this)語句支持繼承,你只需要寫一個Fragment基類,在基類的onCreate方法裏調用FragmentArgs.inject(this)語句,然後讓其它的Fragment繼承這個基類就行了。就像下邊的代碼這樣


 

public class BaseFragment extends Fragment {

 

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

FragmentArgs.inject(this); // 讀取 @Arg 屬性

}

}

 

public class MyFragment extends BaseFragment {

 

@Arg

String title;

 

@Override

public View onCreateView(LayoutInflater inflater,

ViewGroup container, Bundle savedInstanceState) {

 

Toast.makeText(getActivity(), "Hello " + title,

Toast.LENGTH_SHORT).show();

}

 

}

   首先我們從網址https://github.com/sockeqwe/fragmentargs處下載代碼,解壓後的目錄如下所示

 

 

           這裏的annotation和processor文件夾是兩個項目,processor項目依賴於annotation項目。當你點開annotation目錄和processor目錄的時候你會發現他們並不是Eclipse項目。我們需要將這裏的annotation和processor合併到一個項目裏邊並生成.jar文件。首先我們先新建一個java項目(注意是java項目不是android項目)

 

然後我們將annotation目錄下的代碼拷到剛新建的fragmentargs項目的src目錄下(注意拷的時候從com目錄開始拷)

 

 

然後我們在將processor目錄下的代碼拷到fragmentargs目錄下(注意也是從com目錄開始拷)

 

 

除此之外我們還需要將路徑processor\src\main\resources裏邊的文件夾META-INF拷到fragmentargs項目的根目錄下(即META-INF跟src是同級目錄)

 

 

下邊我們該生成.jar文件夾了。

 

 

 

 

 

點擊finish後可能會彈出。。不要管他點擊ok

現在.jar文件就生成成功了。

 

      現在我們來新建一個android項目,並將生成的.jar文件拷到新建的android項目的libs目錄下:

 

 

同時需要額外設置的選項有,

1)           工程屬性—>java Compiler Annotation Processing 勾選Enable project specific settingsEnable annotation prcessing

2)           如果需要生成源文件,則可以設置目標文件的存儲路徑。

3)           Factory Path中指定annotation processor所在的jar包。

 

 

經過上邊的一系列設置之後,你就可以使用FragmentArgs庫了。但是谷歌提供給開發者的Eclipse默認是沒有帶Annotation processing的。

 

解決方法: 

  需要配置一個插件:

就這些了,用起來確實不fragment加bundle方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章