File file = new File(Environment.getExternalStorageDirectory(), "VoiceRecorder");
if (!file.exists()) {
file.mkdirs();
}
اینجا گفتم در روت اصلی حافظه یک دایرکتوری به نام VoiceRecorder بسازه. (آرگومان اول پرنت و آرگومان دوم چایلد می باشد) قسمت دوم حتما باید نوشته بشه وگرنه کرش میکنه.
در نویگیشن کامپوننت میشه به ازای هر اکشن بک استک رو مدیریت کرد. یعنی اگر از یک فرگمنت به دو یا سه جای مختلف بریم به ازای هر کدوم میشه بک استک خاصی رو پیاده سازی کرد.
تگ های مورد استفاده برای مدیریت بک استک:
app:popUpTo="@id/startFragment"
app:popUpToInclusive="false"
لینک پروفایل مدیوم همونی که دیتا بایندینگ رو برای اندروید دولوپ کرده
داکیومنت های خیلی خوبی در مورد دیتا بایندینگ نوشته که اکثرا توی استک اور فلو رفرنس میدن
اداپتر متدهای "onCreateViewHolder" و "onBindViewHolder" و همچنین کلاس داخلی ViewHolder تحت تاثیر قرار میگیرد. کد زیر اداپتر اپ انیمیشن رو نشون میده. تغییرات مشخص هستن.
در دیتا بایندینگ میشه کالکشن ها، int و String و اینا رو هم استفاده کرد. برای استفاده از ArrayList باید پکیج لیست رو import کنیم. البته تعریف جنریک در XML سینتکس متفاوتی داره:
<data>
<import type="java.util.List" />
<import type="com.mimdal.bestcartoons.model.Cartoon" />
<variable
name="cartoons"
type="List<Cartoon>" />
</data>
برای اینکه لاجیک مربوط به کد توی XML بتونه برای ویو ست بشه، اتریبیوت های جدیدی برای ویو تعریف میکنیم و مقدار مورد نظر رو از طریق اونها در XML به ویو میدهیم. برای این کار از annotation
@BindingAdapter()
استفاده میشه.
متدی که کاستوم setter ایجاد میکنه باید استاتیک بوده و ویوی مورد نظر که قراره اتریبیوت جدید برای اون تعریف شه، جز آرگومان هاش باشه. مثلا:
@BindingAdapter("loadImage")
public static void setImage(ImageView view, int id){
view.setImageResource(id);
}
رشته ای که در پرانتز BindingAdapter نوشته میشه، اسم اتریبیوت هست. در متد بالا این اتریبیوت برای ImageViewها تعریف میشه و آرگومان دوم میگه که مقدار این اتریبیوت یک int هست.
نحوه استفاده از این اتریبیوت در ویوی ImageView:
app:loadImage="@{cartoon.image}"