package Ġcom . example . my application Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġorg . apache . commons . io . FileUtils Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . charset . Charset Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġvar ĠList Of Tasks Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġlateinit Ġvar Ġadapter : ĠTask Item Adapter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġval Ġon Long ClickListener Ġ= Ġobject Ġ: ĠTask Item Adapter . On Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Long Clicked ( position : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġitem Ġfrom Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList Of Tasks . remove At ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġadapter Ġthat Ġdata Ġset Ġhas Ġchanged ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġthe Ġtasks Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġload Items () ĊĊĠĠĠĠĠĠĠ Ġ// ĠLook Ġup Ġre cyclerView Ġin Ġlayout ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= ĠfindViewById < RecyclerView >( R . id . re cyclerView ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġadapter Ġpassing Ġin Ġthe Ġsample Ġuser Ġdata ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠTask Item Adapter ( ListOf Tasks , Ġon Long ClickListener ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAttach Ġthe Ġadapter Ġto Ġthe Ġre cycler view Ġto Ġpopulate Ġitems ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġlayout Ġmanager Ġto Ġposition Ġthe Ġitems ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġthe Ġbutton Ġand Ġinput Ġfield Ġso Ġtasks Ġcan Ġbe Ġadded Ġto Ġthe Ġlist ĊĊĠĠĠĠĠĠĠ Ġval Ġinput TextField Ġ= ĠfindViewById < EditText >( R . id . add Task Field ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġa Ġreference Ġto Ġthe Ġbutton Ġand Ġthen Ġset Ġan ĠonClick Listener ĊĠĠĠĠĠĠĠ ĠfindViewById < Button >( R . id . button ). setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġtext Ġthat Ġuser Ġinput ted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Input ted Task Ġ= Ġinput TextField . text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġtext Ġto Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList Of Tasks . add ( user Input ted Task ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġthe Ġadapter Ġthat Ġdata Ġhas Ġchanged ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Inserted ( ListOf Tasks . size Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear Ġtext Ġfield Ġafter Ġitem Ġis Ġadded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput TextField . setText ("") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġtasks Ġlist Ġto Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Items () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSave Ġthe Ġdata Ġthe Ġuser Ġinput ted Ġby Ġreading Ġand Ġwriting Ġfrom Ġand Ġto Ġa Ġfile ĊĊĠĠĠ Ġ// ĠGet Ġthe Ġfile Ġwe Ġneed ĊĠĠĠ Ġfun ĠgetData File () Ġ: ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFile ( files Dir , Ġ" data . txt ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠLoad Ġitems Ġby Ġreading Ġfrom Ġthe Ġfile ĊĠĠĠ Ġfun Ġload Items () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList Of Tasks Ġ= ĠFileUtils . read Lines ( getData File (), ĠCharset . default Charset ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( io Exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġio Exception . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSave Ġthe Ġitems Ġby Ġwriting Ġto Ġthe Ġfile ĊĠĠĠ Ġfun Ġsave Items () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . write Lines ( getData File (), ĠList Of Tasks ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( io Exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġio Exception . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }