تفاوت setValue و postValue
اين اسلوب ها براي تغيير تحول داده داخل MutableLiveData استعمال ميشوند.
setValue را تنها ميتوانيد طراحي اپليكيشن در Thread مهم فراخواني فرمائيدpostValue را معمولاً در Thread دور نما فراخواني ميكنيم
دقت: متدهاي setValue و postValue در كلاس LiveData نيز وجود داراهستند اما در كلاس LiveData اين متدها protected ميباشند و صرفا كلاس هايي كه از LiveData ارث بري داراهستند بدين متدها دسترسي داراهستند. البته در MutableLiveData اين متدها public و در دسترس ميباشند.
LiveData / MutableLiveData معمولاً در آپ ديت رساني داده هاي تيم اي (List ، ArrayList و غيره) در RecyclerView به كار گيري ميگردد.
درپي ، طرحي توليد خواهيم كرد كه اطلاعات را از مقر داده SQLite ميخواند، داده هاي مقر داده را تغيير و تحول ميدهد و اطلاعات را در RecyclerView نشانه ميدهد. براي اينكه هر مجال اطلاعات تغيير و تحول كرد ركوردهاي RecyclerView آپديت گردد از MutableLiveData به كارگيري خواهيم كرد.
در هر آپ تو ديت رساني اطلاعات ، براي خودداري از بارگيري دوباره سطرهاي RecyclerView كه تغيير و تحول نكرده اند ArrayList سابق و نو را با DiffUtil مقايسه ميكنيم.
ساختار پروژه مثال
اضافه كردن نيازمندي ها به پوشه گريدل
كد هاي تحت را به پوشه build.gradle درون فايل app اضافه فرماييد:
implementation 'com.android.support:design:27.1.1'implementation 'com.android.support:cardview-v7:27.1.1'implementation 'android.arch.lifecycle:extensions:1.1.1'
طراحي پروژه
كد مرتبط با لايوت activity_main.xml در پايين اورده شده ميباشد:
xmlns:app="https://schemas.android.com/apk/res-auto"xmlns:tools="https://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">
android:layout_width="match_parent"android:layout_height="wrap_content"android:theme="@style/AppTheme.AppBarOverlay">
android:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"app:popupTheme="@style/AppTheme.PopupOverlay" />
android:layout_width="match_parent"android:layout_height="match_parent"app:layout_behavior="@string/appbar_scrolling_view_behavior">
android:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent" />
android:id="@+id/fab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="bottom|end"android:layout_margin="@dimen/fab_margin"app:srcCompat="@android:drawable/ic_input_add" />
كد لايوت list_item_row.xml در تحت اورده شده ميباشد:
android:layout_width="match_parent"android:layout_height="wrap_content">
android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="8dp"android:gravity="center_vertical">
android:id="@+id/tvUrl"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentStart="true"android:autoLink="web"android:padding="8dp"android:textColor="@android:color/black"android:textSize="20sp" />
android:id="@+id/tvDate"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/tvUrl" />
android:id="@+id/btnDelete"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentEnd="true"android:layout_centerVertical="true"android:src="@android:drawable/ic_menu_delete" />
كد كلاس DbSettings.java در ذيل گفته شده ميباشد:
package com.journaldev.androidlivedata.db;
import android.provider.BaseColumns;
public class DbSettings {
public static final String DB_NAME = "favourites.db";public static final int DB_VERSION = 1;
public class DBEntry implements BaseColumns {
public static final String TABLE = "fav";public static final String COL_FAV_URL = "url";public static final String COL_FAV_DATE = "date";
}}
برچسب: طراحي اپليكيشن،