我正在构建一个遵循MVVM架构的Android应用程序.适配器(对于recyclerview,viewpager等)属于哪里?它是View还是ViewModel?
我上课了
open data class Person(var name: String)
Run Code Online (Sandbox Code Playgroud)
和另一堂课
data class Student(var reg: String) : Person("")
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误
错误:修饰符'open'与'data'不兼容
如果我从Person类中删除数据的罚款.
为什么kotlin打开和数据不兼容?
我创建了一个向用户显示调查向导的应用程序。当用户启动/ start命令时,我将调用AddProject:
const Telegraf = require('telegraf');
const bot = new Telegraf(process.env.BOT_TOKEN);
const session = require('telegraf/session');
bot.use(session());
const main = new TelegrafInlineMenu("Welcome.");
main.setCommand('start');
main.simpleButton('Start Survey', 'START_SURVEY', {
doFunc: async ctx => surveyController.AddProject(ctx, bot)
});
Run Code Online (Sandbox Code Playgroud)
基本上,以上代码创建了一个菜单,其中显示了标签Welcome(欢迎)和一个按钮以启动调查。当用户单击按钮时,从SurveyController调用方法AddProject:
const Composer = require('telegraf/composer');
const stepHandler = new Composer();
const Stage = require('telegraf/stage');
const WizardScene = require('telegraf/scenes/wizard');
const userController = require('../controllers/user.controller');
module.exports = {
AddProject: async function (ctx, bot) {
const superWizard = new WizardScene('super-wizard',
(ctx) => {
ctx.reply('Step 1', Markup.inlineKeyboard([
Markup.urlButton('??', 'http://telegraf.js.org'),
Markup.callbackButton('?? …Run Code Online (Sandbox Code Playgroud) 我面对java.math.BigDecimal并且android.icu.math.BigDecimal正如我BigDecimal在项目中所要求的那样.
我意识到Android BigDecimal需要API级别24
这两个班级有什么不同?我想知道Android实现中是否有任何性能优化?
刚刚学习Kotlin在下面的第一个代码val中,其他代码中没有关键字,没有,如果val和var被省略,这里有什么不同?
class Person(val firstName: String, val lastName: String) {
}
class Person(firstName: String, lastName: String) {
}
Run Code Online (Sandbox Code Playgroud) 这是我的代码
class BookmarkViewModel(app: Application) : AndroidViewModel(app) {
private val dao = BookmarkDb.get(app).bookmarkDao()
companion object {
private const val PAGE_SIZE = PagingConstants.PERPAGE
/**
* If placeholders are enabled, PagedList will report the full size but some items might
* be null in onBind method (PagedListAdapter triggers a rebind when data is loaded).
* <p>
* If placeholders are disabled, onBind will never receive null but as more pages are
* loaded, the scrollbars will jitter as new pages are loaded. You …Run Code Online (Sandbox Code Playgroud) 我正在Room用作 ORM,这是我的 Dao 界面:
@Dao
interface UserDao {
@Query(value = "SELECT * FROM User LIMIT 1")
fun get(): Single<User?>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun add(profile: User)
}
Run Code Online (Sandbox Code Playgroud)
另一方面,我在 Repository 中有一个方法可以检查用户是否登录,这是实现代码:
override fun isUserLogin(): Single<Boolean> = userDao
.get().async()
.onErrorReturn { null }
.map { it != null }
Run Code Online (Sandbox Code Playgroud)
如果没有行匹配查询,Room 将抛出以下异常:
查询返回空结果集:SELECT * FROM User LIMIT 1
我想null在这种情况下返回,但是当我执行代码时,它会抛出一个异常并显示以下消息:
提供的值为空
我不能使用Optional因为 Dao 正在返回Single<User?>所以onErrorReturn应该返回相同的类型。
如何在不更改 Dao 的情况下检查用户是否存在?
我正在尝试向CalendarAndroid中的Class 添加两个扩展功能,以将特定的日期时间模式转换为Calendar,反之亦然
fun Calendar.fromIsoString(date: String): Calendar = this.apply {
time = SimpleDateFormat(SERVER_DATE_PATTERN, Locale.US).parse(date)
}
fun Calendar.fromIsoString(date: String?): Calendar? {
if (date == null) return null
time = SimpleDateFormat(SERVER_DATE_PATTERN, Locale.US).parse(date)
return this
}
Run Code Online (Sandbox Code Playgroud)
但这给了我以下错误:
平台声明冲突:以下声明具有相同的JVM签名(fromIsoString(Ljava / util / Calendar; Ljava / lang / String;)Ljava / util / Calendar;)
是否可以同时具有这两个功能?怎么样?
注意:我通过向Unit其中一个功能添加可选参数来解决该问题:
fun Calendar.fromIsoString(date: String?, a: Unit = Unit): Calendar? {
if (date == null) return null
time = SimpleDateFormat(SERVER_DATE_PATTERN, Locale.US).parse(date)
return this
}
Run Code Online (Sandbox Code Playgroud)
但是我认为这很棘手,不是一个好习惯!有更好的解决方案吗?
假设我有以下代码:
open class Fruit
class Apple : Fruit()
open class Juice<T : Fruit>
class AppleJuice : Juice<Apple>()
fun <F : Fruit, J : Juice<F>> makeJuice(juiceClass : Class<J>, fruit : F) : J {}
Run Code Online (Sandbox Code Playgroud)
我这样调用该函数:
val appleJuice : AppleJuice = makeJuice(AppleJuice::class.java, Apple())
Run Code Online (Sandbox Code Playgroud)
但是,我不想传递类对象,而是希望将其AppleJuice作为类型传递:
val appleJuice : AppleJuice = makeJuice<AppleJuice>(Apple())
Run Code Online (Sandbox Code Playgroud)
我重构了我的功能以内联reified:
inline fun <F : Fruit, reified J : Juice<F>> makeJuice(fruit : F) : J {}
Run Code Online (Sandbox Code Playgroud)
但是现在我必须指定两种类型:
val appleJuice : AppleJuice = makeJuice<Apple, AppleJuice>(Apple())
Run Code Online (Sandbox Code Playgroud)
从理论上讲,Apple不需要类型,因为它已经从AppleJuice …
我有一个Activity带有 aFragmentContainerView和BottomNavigationView设置的应用程序:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:defaultNavHost="true"
app:navGraph="@navigation/splash" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:visibility="gone"
app:elevation="12dp"
app:labelVisibilityMode="unlabeled"
app:menu="@menu/menu_bottom_nav_main" />
</LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
当用户进入应用程序时,我需要显示一个启动页面(如果需要,还需要登录),然后将其导航到主页。所以我创建了 4 个导航图,1 个用于飞溅,3 个用于底部导航。我正在使用android 示例中的这种灭绝来设置带有 3 个图形的底部导航。这是我的MainActivity代码:
@AndroidEntryPoint
class MainActivity : BaseActivity<ActivityMainBinding, MainViewModel>(
R.layout.activity_main,
MainViewModel::class,
) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!vm.splashPassed) {
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
currentNavController = MutableLiveData(navHostFragment.navController) …Run Code Online (Sandbox Code Playgroud) kotlin ×7
android ×5
android-room ×1
bigdecimal ×1
class ×1
inheritance ×1
java ×1
javascript ×1
kotlin-reified-type-parameters ×1
mvvm ×1
node.js ×1
rx-java ×1
telegraf ×1
telegram ×1
telegram-bot ×1