425 Topics

Member Avatar for
Member Avatar for dimitrilc

## Introduction ## If your Android Application uses Room, then you might have wondered how to prepopulate a Room database. In this tutorial, we will learn how to prepopulate a Room database. ## Goals ## At the end of the tutorial, you would have learned: 1. How to prepopulate a …

1
1K
Member Avatar for dimitrilc

## Introduction ## When working with music files, you might have wondered how to load display art from Audio files. In this tutorial, we will learn how to load thumbnails for audio files. ## Goals ## At the end of the tutorial, you would have learned: 1. How to load …

2
2K
Member Avatar for dimitrilc

## Introduction ## When working with Hilt, you might have wondered how to inject ViewModels into your application. In this tutorial, we will learn how to inject ViewModels into your app Fragments. ## Goals ## At the end of the tutorial, you would have learned: 1. How to inject ViewModels …

4
1K
Member Avatar for dimitrilc

## Introduction ## In Android development, reusable layouts can be used to reduce duplicate code across XML files. In this tutorial, we will learn how to reuse layout files, especially with View Binding enabled. ## Goals ## At the end of the tutorial, you would have learned: 1. How to …

2
604
Member Avatar for dimitrilc

## Introduction ## MediaPlayer (`android.media.MediaPlayer`) is a popular way to play media files, and combining it with a SeekBar can greatly improve the user experience. In this tutorial, we will learn how to synchronize a MediaPlayer progress to a SeekBar position. ## Goals ## At the end of the tutorial, …

2
1K
Member Avatar for dimitrilc

## Introduction ## When working with a Room database, we are mostly restricted to save data using primitives (*and boxed primitives*). Reference types are not supported right out of the box, but can be enabled by creating additional [TypeConverter](https://developer.android.com/reference/androidx/room/TypeConverter). If you are familiar with ORM-light frameworks such as Spring JDBC, …

2
2K
Member Avatar for dimitrilc

## Introduction ## In this tutorial, we will learn how to add swipe-to-remove and drag-to-reorder functionalities into RecyclerView. ## Goals ## At the end of the tutorial, you would have learned: 1. How to add swipe-to-remove and drag-to-reorder functionality to a RecyclerView. ## Tools Required ## 1. Android Studio. The …

2
228
Member Avatar for dimitrilc

## Introduction ## When using Navigation Components, you might have wondered how to pass arguments between destinations. We will learn how to do just that in this tutorial. This tutorial also builds upon the [Basic Navigation](https://www.daniweb.com/programming/mobile-development/tutorials/536923/android-native-how-to-use-navigation-component#post2282945) tutorial, so if you are not familiar with Navigation Components, I would recommend you …

1
253
Member Avatar for dimitrilc

## Introduction ## If you are working on a native Android app using the View system, then you might have come across a situation where you would need to add a Composable (`androidx.compose.runtime.Composable`) into your View hierarchy. In this tutorial, we will learn how to add a Composable into an …

2
346
Member Avatar for dimitrilc

## Introduction ## When working on Android with Kotlin, you might have ran into property delegates on a few occasions, such as `activityViewModels()` from `androidx.fragment.app` or `remember()` from `androidx.compose.runtime`. In this tutorial, we will learn what property delegates are and how to create them ourselves. ## Goals ## At the …

3
170
Member Avatar for dimitrilc

## Introduction ## Among all of the animation API’s on Android, MotionLayout is one of the best classes to use to create complex animations. It can animate property and motion of multiple views at the same time. Other benefits include declarative style XML and the intuitive **Motion Editor** built right …

Member Avatar for johnoOz
4
546
Member Avatar for dimitrilc

## Introduction ## If you are working with the latest Material 3 libraries on Android, you might have wondered how to use the **Bottom Navigation Bar** in your App. In this tutorial, we will learn how to use the Material 3 Bottom Navigation Bar (BNB). ## Goals ## At the …

2
3K
Member Avatar for dimitrilc

## Introduction ## Proto DataStore is a great way to store the **permanent** state of your application, especially if you prefer type safety. In this tutorial, we will learn how to store our App state using the Proto DataStore. ## Goals ## At the end of the tutorial, you would …

2
135
Member Avatar for 4lexo1234

Hello All! We are new to Vue3. We are developing a product web catalog application based on vue3. This application has only the frontend, because all the product data is pulled via REST API. This application can be used by multiple customers. The functionality should be the same, but every …

0
49
Member Avatar for dimitrilc

## Introduction ## The **Storage Access Framework** (SAF) provides a great way to access files exposed by other applications via their own DocumentProviders. In this tutorial, we will learn how to use the SAF in our App. ## Goals ## At the end of the tutorial, you would have learned: …

1
455
Member Avatar for dimitrilc

## Introduction ## In Android development, the MediaStore API is a great API to use if you are building a music player. In this tutorial, we will learn how to query for audio files in the MediaStore database. ## Goals ## At the end of the tutorial, you would have …

1
694
Member Avatar for dimitrilc

## Introduction ## The release of Android 12 also came together with Material 3. Whether you love it or hate it, it is likely to be here to stay for a couple of years, therefore, it would be useful to know how to use it. In this tutorial, we will …

2
3K
Member Avatar for dimitrilc

## Introduction ## WorkManager is the preferred method of managing background tasks on Android. It also includes convenient extensions for RxJava3 and Kotlin Coroutines. In this tutorial, we will learn how to use WorkManager as well as how to observe the background task with the debugging tool Background Task Inspector. …

1
129
Member Avatar for dimitrilc

## Introduction ## Coil is a popular image loading library for Kotlin-first Android projects. It is lightweight, fast and is super easy to use. In this tutorial, we will learn how to use Coil to load images into our project. ## Goals ## At the end of the tutorial, you …

3
1K
Member Avatar for dimitrilc

## Introduction ## In this tutorial, we will learn how to capture a picture with the new **ActivityResult** APIs(`androidx.activity.result`), which replace the `startActivityForResult()` and `onActivityResult()` APIs(*from Activity class*). Additionally, we will also learn about the ContentProvider **FileProvider**, which we will have to set up to save our images. ## Goal …

3
6K
Member Avatar for dimitrilc

## Introduction ## Navigation component is an abstraction on top of FragmentManager, which simplifies navigation between fragments. In this tutorial, we will learn how to use the Navigation component in our App. ## Goal ## At the end of the tutorial, you would have learned: 1. How to use the …

3
221
Member Avatar for dimitrilc

## Introduction ## Regardless of whether you like notches on your devices or not, they exist, so as developers, we will have to adapt our Apps to work with them. In this tutorial, we will learn how to adapt our code to work with notches. The device used in this …

0
417
Member Avatar for dimitrilc

## Introduction ## In Android development, Espresso can be combined with Junit to create powerful UI automation tests. In this tutorial, we will learn how to create Espresso tests. ## Goals ## At the end of the tutorial, you would have learned: 1. How to create Espresso tests. ## Tools …

Member Avatar for John_165
2
432
Member Avatar for dimitrilc

## Introduction ## UI Automator is a library that allows you to create tests that can interact with other components besides your App, such as Settings or other Android components. In this tutorial, we will learn how to incorporate UI Automator into our tests. ## Goals ## At the end …

1
644
Member Avatar for dimitrilc

## Introduction ## In Android development, Intents are used to request an action from an app component. There are two types of Intents: explicit and implicit. Explicit Intents are used when you know the exact package name of the component you need started. Implicit Intents, however, do not need a …

3
362
Member Avatar for dimitrilc

## Introduction ## Snackbars are great for displaying brief messages providing feedback to your users. In this tutorial, we will learn how to create Snackbars. ## Goals ## At the end of the tutorial, you would have learned: 1. How to create a Snackbar. ## Tools Required ## 1. Android …

3
227
Member Avatar for dimitrilc

## Introduction ## Notification is a great way to display information outside of your Android application. Your end users most likely already interact with notifications everyday, so knowing how to create notifications can greatly boost your user experience (*but can also backfire if used incorrectly*). In this tutorial, we will …

2
213
Member Avatar for dimitrilc

## Introduction ## Starting on API level 25, static Shortcuts can be used to quickly navigate to a specific point in your app. In this tutorial, we will learn how to create static shortcuts for an Android app. ## Goals ## At the end of the tutorial, you would have …

2
204
Member Avatar for dimitrilc

## Introduction ## With OLED screens becoming more and more common on smartphones, adapting a dark theme to your app can provide a boost to battery life. In this tutorial, we will learn how to add a dark theme to your native Android app. ## Goals ## At the end …

2
229
Member Avatar for dimitrilc

## Introduction ## All TextView objects have a special attribute called `textAppearance`. This attribute can be used to set the style for text content in a TextView without affecting other styling attributes on the same TextView object. In this tutorial, we will learn how to apply `textAppearance` to TextView objects. …

2
1,000
Member Avatar for dimitrilc

## Introduction ## Complex Views can use up RAM and reduce the performance of your Android apps. If a View is rarely used, you should consider delaying its rendering until it is needed by your app. One way to do that is to use the ViewStub View. ViewStub is very …

2
818
Member Avatar for dimitrilc

## Introduction ## If your Android app is available to a global audience, you might have wondered how to load localized **String**s into your app. This tutorial will teach you how to do just that. There are quite a few steps involved, but once you understand the concepts, it will …

2
197
Member Avatar for dimitrilc

## Introduction ## One of the best debugging tools in Android Studio is the *live database inspector*. It allows developers to peek at the current state of the database and even run queries against it. In this tutorial, we will learn how to use it to debug a local SQLite …

2
188
Member Avatar for dimitrilc

## Introduction ## When localizing your application, `ResourceBundle` can be a great way to load Strings from different locales. The only concrete implementation of ResourceBundle is `PropertyResourceBundle`, which allows us to load static Strings from a text file. Because `.properties` is a common file extension used for ResourceBundles, creating ResourceBundle …

2
245
Member Avatar for dimitrilc

## Introduction ## Junit is a popular framework to create tests for Java applications. Although individual unit tests are mostly straightforward, integration and functional tests are a little bit more involved because they usually require multiple components working together. For that reason, understanding the life cycle of Junit tests can …

2
254
Member Avatar for dimitrilc

## Introduction ## When collecting a stream, the `groupingBy()` Collector(`java.util.stream.Collector`) can be used to put data into different groups based on specified conditions. `groupingBy()` is a little bit more complicated to use than [partitioningBy()](https://www.daniweb.com/posts/jump/2280662) because the key can be of any type, whereas with `partitioningBy()`, the keys must be of …

2
146
Member Avatar for dimitrilc

## Introduction ## Whenever we want to modify numbers from multiple threads running concurrently, such as modifying a counter, one of the best options is to use the AtomicX classes. The most basic numeric atomic classes are AtomicInteger and AtomicLong. In this tutorial, we will learn how to use the …

2
129
Member Avatar for dimitrilc

## Introduction ## If you are a Java developer coming to Kotlin, you might have wondered how to use a language construct that is similar to the try-with-resource statement in Java to automatically close Autocloseable/Closeable resources for you. Luckily, Kotlin provides the inline extension function `use()` that provides similar functionality …

2
359
Member Avatar for dimitrilc

## Introduction ## In Java, a common way to express a type that is a combination of two or more types is to just create an interface that extends the other types. The problem with this approach is that your code might be littered with interface declarations, polluting your code …

2
197
Member Avatar for dimitrilc

## Introduction ## In Kotlin, we can extend classes without subclassing via extension functions and extension properties. This feature is useful whenever we want to extend 3rd party libraries or final classes. In this tutorial, we will learn what extension functions and extension properties are, and how to create our …

2
304
Member Avatar for dimitrilc

## Introduction ## `launch()` and `async()` are two of the most common coroutine builders to use in Kotlin, but they are somewhat different in usage. `launch()` returns a `Job` object, which can be used to cancel or perform other operations on the underlying coroutine. If our coroutine lambda returned a …

3
371
Member Avatar for dimitrilc

## Introduction ## In this tutorial, we will look at the RxJava `mergeWith()` and `concatWith()` operators. Amongst others, they are used to combine Observables together. All of the RxJava operators have ambiguous names, and behave differently, so let us take a look at 2 operators, `mergeWith()` and `concatWith()`, to see …

3
1K
Member Avatar for dimitrilc

## Introduction ## RxJava 3 includes 5 core classes: 1. Flowable, 2. Observable, 3. Single, 4. Completable, 5. Maybe. This tutorial aims to teach the basic concepts behind Observable, which serves as a foundation for understanding the other 4 classes. ## Goals ## At the end of the tutorial, you …

3
2K
Member Avatar for dimitrilc

## Introduction ## With coroutines in Kotlin, we are able to execute suspending functions without blocking the current thread. By default, most coroutine builder functions use the `Dispatchers.Default` context, but it is also possible to use other implementations of `CoroutineContext`. In this tutorial, we will learn about the 2 `CoroutineDispatchers`: …

3
156
Member Avatar for dimitrilc

## Introduction ## The `java.nio.file.Files` class includes many convenient methods to read file attributes, but sometimes these convenient methods just are not enough to meet our needs. In this tutorial, we will go over 5 ways to use the `Files` class to read file attributes so you can choose the …

3
305
Member Avatar for dimitrilc

## Introduction ## When working with an application with a global user base, there is usually a need to display text, numbers, currency, date, and time in multiple localized formats. For example, the **en-US** (*English-USA*) version of the date September 22, 2021 is written as 22 сентября 2021 г. when …

3
216
Member Avatar for dimitrilc

## Introduction ## In Android development, the current recommended library for Dependency Injection is Hilt. The most obvious benefits of using Hilt are reduced boilerplate code and lifecycle-aware components(*and their associated annotations*). Hilt is a great library, but it is not perfect. Hilt is built on top of Dagger 2, …

2
1K
Member Avatar for dimitrilc

## Introduction ## In Java 8, `@Repeatable` was introduced and this is the recommended way to create repeating annotations. We still have to create a holder Annotation(*annotation that holds an array of other annotations*), but we no longer have to declare the holder Annotation at the callsite. This tutorial aims …

3
301
Member Avatar for dimitrilc

## Introduction ## Java 15 introduced Text Blocks. The main reason behind Text Blocks is that programmers can write multiline strings without having to specify escapes for the most common scenarios. ## Goals ## At the end of this tutorial, you would have learned: 1. How to store multiline String …

Member Avatar for JamesCherrill
2
165
Member Avatar for dimitrilc

## Introduction ## Before Java 8, methods had to throw an exception or return `null`, with neither of which approaches were perfect. Optional, OptionalInt, OptionalLong, and OptionalDouble were introduced in Java 8 to represent values that might possibly be `null`. Optionals have two internal states, **empty** or **present**. An Optional …

Member Avatar for JamesCherrill
2
2K

The End.