Android Leanback库Horizo​​ntalGridView的scrollToPosition不起作用

我正在实施Android TV应用程序,并使用Leanback library HorizontalGridView 。 我有一个自定义布局。 在创建活动之后,我必须将HorizontalGridView滚动到特定位置,但不幸的是, scrollToPositio(position)方法根本无法在此布局上工作。 它什么都不做。 我发现,当我专门设置layout manager LinearLayoutManager它的作品。 但问题是,当我不使用leanback默认的HorizontalGridView LayoutManager ,使用D-pad聚焦下一个项目时出现问题。 基本上,如果我使用普通的RecyclerView ,带有D-pad的控件不能按预期工作,所以我决定采用leanback实现,这个问题已经解决了,但是到目前为止我还是无法使用scrollToPosition方法。 有任何想法吗? 我的代码片段: 布局: 代码[Kotlin]: binding.photoGalleryRecycler.scrollToPosition(position) binding.photoGalleryRecycler.getChildAt(position)?.requestFocus() 我也尝试了一些这样的黑客: // save default leanback layout manager var defaultLayoutManager = binding.photoGalleryRecycler.layoutManager // set LinearLayoutManager binding.photoGalleryRecycler.layoutManager = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false) // scroll to position and request focus binding.photoGalleryRecycler.scrollToPosition(position) binding.photoGalleryRecycler.getChildAt(position)?.requestFocus() // set default layout […]

Android:导航到另一个片段

我有一个ViewPager和TabLayout设置4片段,就像任何现代的社交应用程序。 我尝试过,尝试过,尝试过,但我无法find我的问题的答案。 在其中一个选项卡中,我想从片段导航到另一个片段,但不是导航,而是将其放在顶部,我仍然可以与前一个片段进行交互。 这不是替代,只是把它放在最上面。 码: // Chat fragment : Inside the onCreateView fun this.loadConvos({ chats -> this.chatsArray = chats this.chatsArray.sortBy { it.timestamp} this.chatsArray.reverse() listView.adapter = ChatBaseAdapter(this.chatsArray, context) listView.setOnItemClickListener { parent, view, position, id -> this.chatID = this.chatsArray[position].chatID!! Toast.makeText(context, “Position Clicked: ” + position, Toast.LENGTH_SHORT).show() childFragmentManager .beginTransaction() .replace(R.id.chatFragmentLayout, MessagesFragment()) .addToBackStack(null) .commit() } }, { error -> […]

链接多个RxJava,Room和Retrofit

我正在使用RxJava / Kotlin和Room和Retrofit。 我确信我没有写任何东西,因为我刚开始学习RxJava。 这种情况是我打电话来检查数据库中是否有最喜欢的记录,并将它们放入列表中,从API获取数据并将其插入到数据库中,使用之前的collections夹列表更新数据库,并获取所有记录更新,列表。 我得到了我的片段的结果,但每次我得到它,就好像我得到1不喜欢的项目,直到我没有collections的项目。 Repository fun getKafaniFromApi(): Observable<List> { return apiService.getKafani().toObservable().doOnNext { insertKafaniInDb(it) } } fun getKafaniFromDb(): Observable<List> { return kafanaDao.getKafani().toObservable() } fun insertKafaniInDb(kafani: List) { Observable.fromCallable { kafanaDao.insertAll(kafani) } .subscribeOn(Schedulers.io()) .subscribe { Timber.d(“Inserted ${kafani.size} kafani from API in DB…”) } } fun getFavoriteKafani(): Single<List> { return kafanaDao.getFavoriteKafani() } fun setKafanaFavorite(kafana: Kafana, isFavorite: […]

如何将数组列表中的特定项目移动到第一项

例如:一个列表 ABCDE 给定C,切换到 CABDE 注意数组的大小会改变,有些项目可能在运行时间被删除 Collections.swap(url, url.indexOf(itemToMove), 0); 这个语句是不行的,因为它输出CBADE不是CABDE,怎么解决? 谢谢。

我们是否需要java项目中的空类? 如果是,那为什么?

在空类(没有字段和属性)也编译器自动创建编译后的默认构造函数。 如果我们从不使用这个空类,那为什么编译器会创建这个默认构造函数?

IN子句和占位符

我正在尝试在Android中执行以下SQL查询: String names = “‘name1’, ‘name2”; // in the code this is dynamically generated String query = “SELECT * FROM table WHERE name IN (?)”; Cursor cursor = mDb.rawQuery(query, new String[]{names}); 但是,Android不会使用正确的值替换问号。 我可以做到以下,但是,这不防止SQL注入: String query = “SELECT * FROM table WHERE name IN (” + names + “)”; Cursor cursor = mDb.rawQuery(query, null); 我怎样才能解决这个问题,并能够使用IN子句?

Android:只有创建视图层次结构的原始线程可以在调用invalidate()时触及其视图。

我正在尝试使用Movie对象来播放gif,它需要我调用invalidate()方法。 但是每当我调用这个方法,我得到以下错误: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 我如何解决这个问题,为什么会发生这种情况

Android DatePicker字体

我知道你可以将自定义的TypeFace应用于Android中的TextView,如下所示: TextView tv = findViewById(R.id.textview01); Typeface tf = Typeface.createFromAsset(getAssets(), “fonts/BLACKROSE.TTF”); tv.setTypeface(tf); 有没有办法做到这一点DatePicker?

编译错误:智能转换为”是不可能的,因为”是一个局部variables,

为了简化我的实际使用情况,我们假设我想在列表中find最大数字: var max : Int? = null listOf(1, 2, 3).forEach { if (max == null || it > max) { max = it } } 但是,编译失败,出现以下错误: 智能转换为’Int’是不可能的,因为’max’是一个由变化的闭包捕获的局部variables 为什么更改的闭包会阻止智能投射在这个例子中工作?

使用JNA X11 XGrabHook,我似乎无法得到任何事件注册

正如标题所说,我试图在Linux中获得键盘挂钩(我正在运行ubuntu 14.04) 在搜索完成之后,我认为最好的方法是使用XGrabKey函数。 我看到它有JNA的实现,所以我写了下面的代码(Kotlin): private fun blockLinux() { Thread { x = X11.INSTANCE display = x.XOpenDisplay(null) window = x.XDefaultRootWindow(display) ev = X11.XEvent() x.XGrabKey(display, X11.AnyKey, X11.AnyModifier, window, 1, X11.GrabModeAsync, X11.GrabModeAsync) //x.XSelectInput(display, window, NativeLong(X11.KeyPressMask.toLong())) while (true) { x.XNextEvent(display, ev) if (ev.type == X11.KeyPress) { key = ev.readField(“xkey”) as X11.XKeyEvent println(“PLZ” + key.keycode) } } }.start() } 我运行这个代码,但它不打印任何东西。 […]