我有一个RecyclerView用户选择一个项目.选择后,某些视图在文本之前变为可见(参见图像).我想为它的外观设置动画.

animateLayoutChanges 项目布局上的属性完美地完成了工作,除了视图外观的动画类型 - 它淡入.我希望它从0到100%大小缩放,我相信它被称为'弹出'动画.
如果我禁用animateLayoutChanges并使用XML动画,它可以工作,但附近的文本不再是动画的(它应该滑动以容纳视图及其边距的空间).它立即向右移动,然后播放动画.反向动画更糟糕,因为文本在视图消失之前会重叠视图.
所以我需要以某种方式组合默认机制和我自己的动画.如果不深入研究自定义动画,最简单的方法是什么?
我的应用程序有很多图像,有时由于内存不足而导致崩溃.我写了这个在开发者网站上找到的函数.
public void onLowMemory(){
}
Run Code Online (Sandbox Code Playgroud)
但问题是在低内存情况下永远不会调用此函数.我该怎么做才能调用这个函数.我需要在设备内存不足时提醒用户.
有两个片段:ParentFragment和ChildFragment.
ChildFragment已被添加到视图中ParentFragment.
现在使用Dagger2Android有ParentFragmentModule一个方法:
@Provides
fun provideViewModel(fragment: ParentFragment, myViewModelFactory: MyViewModelFactory): MyViewModel {
return ViewModelProviders.of(fragment, myViewModelFactory).get(MyViewModelImpl::class.java)
}
Run Code Online (Sandbox Code Playgroud)
其中MyViewModelFactory,MyViewModel,MyViewModelImpl是在应用程序中创建的简单ViewModel逻辑.
并且ChildFragmentModule具有以下方法:
@Provides
fun provideViewModel(fragment: ChildFragment, myViewModelFactory: MyViewModelFactory): MyViewModel {
return ViewModelProviders.of(fragment, myViewModelFactory).get(MyViewModelImpl::class.java)
}
Run Code Online (Sandbox Code Playgroud)
这显然是创建两个单独的实例,ViewModel因为它们接收两个不同的片段实例.
我们如何使它返回相同的实例,以便可以在Parent和Child片段之间共享数据?
我试过传递ParentFragment而不是ChildFragment在ChildFragmentModule,但这导致Dagger依赖注入错误.
我的应用程序由一个单独组成Activity.在这个活动中,我正在创建多个HandlerThreads,它们在循环中运行以执行套接字阻塞操作.
目前我HandlerThread在我的期间向这些人发布了一条戒烟信息Activity.onDestroy().
有时,当我打开我的应用程序,关闭它并重新启动它时,它会崩溃(很多时候是由于向未运行的处理程序线程发送消息).
我的问题是:关闭我的应用程序时关闭的正确方法HandlerThread是什么?(请注意,那些线程可能在套接字操作上阻塞).
编辑:更多信息: 我有一个处理程序线程池,它是在onCreate中启动的(当我第一次启动我的应用程序时没问题).
每个处理程序runnable循环都包含一个
if (shouldRun) {
//body
}
else {
close();
}
Run Code Online (Sandbox Code Playgroud)
声明.
close方法删除所有挂起的消息和runnables,并向处理程序发送一条消息,使其调用它looper.quit().这样,如果当前处理程序线程被IO操作阻止,只有一旦它完成它,他将退出().
在 Jetpack Compose 中,所有屏幕都是可组合功能。FragmentsJetpack Compose 中未使用。
我们如何使用 Jetpack Compose 处理生命周期事件?如果我们使用 Fragment,我们可以处理生命周期事件 ( onStart/onPause/onResume/onStop)。这些对于释放资源、停止观察更改等不同场景很有用。
在 Jetpack Compose 中,如果我需要处理这些事件,我该如何在可组合屏幕中处理这些事件?
请帮助我提供一些想法或资源,以便我能够理解这一点。
提前致谢。
android android-lifecycle android-jetpack android-jetpack-compose
我想在opengl中画一条线.
glBegin(GL_LINES);
glVertex2f(.25,0.25);
glVertex2f(.75,.75);
glEnd();
Run Code Online (Sandbox Code Playgroud)
这段代码画线,但如果我想从坐标(10,10)到坐标(20,20)画一条线,我该怎么办?
这意味着什么(.25,.25)和(.75,.75)?
API级别21或更高级别的状态栏颜色根据我的要求而变化,但是如何更改API级别21以下的颜色。
以下是两个API的屏幕截图
API级别21:

API等级19:

colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FFFFFF</color>
<item name="b" type="color">#FF33B5E5</item>
<item name="p" type="color">#FFAA66CC</item>
<item name="g" type="color">#FF99CC00</item>
<item name="o" type="color">#FFFFBB33</item>
</resources>
Run Code Online (Sandbox Code Playgroud)
Style.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBarOverlay">false</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
<item name="tabSelectedTextColor">@color/colorAccent</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> …Run Code Online (Sandbox Code Playgroud) 来自谷歌的示例源代码很容易在前端实现连续的位置更新,但我仍然可以使用FusedLocationApi和PendingIntent清楚地了解背景位置更新是如何工作的.
LocationService类:
public class LocationService extends IntentService {
private static final String TAG = LocationService.class.getSimpleName();
private static final String ACTION_LOCATION_UPDATED = "location_updated";
private static final String ACTION_REQUEST_LOCATION = "request_location";
public static IntentFilter getLocationUpdatedIntentFilter() {
return new IntentFilter(LocationService.ACTION_LOCATION_UPDATED);
}
public static void requestLocation(Context context) {
Intent intent = new Intent(context, LocationService.class);
intent.setAction(LocationService.ACTION_REQUEST_LOCATION);
context.startService(intent);
}
public LocationService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
String action = intent != null ? intent.getAction() : null;
if (ACTION_REQUEST_LOCATION.equals(action)) {
onRequestLocation();
}
else …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的应用程序连接到Google Play服务以访问Google云端硬盘,但它显示我与statusCode的连接失败SIGN_IN_REQUIRED.
但它似乎就在3天前表现得那样.我也检查了谷歌的开发者控制台.他们可能在API中改变了一些我无法弄清楚的东西.欢迎您的帮助.
我的代码:
/**
* Create a new file and save it to Drive.
*/
private void saveFileToDrive(final byte[] data) {
// Start by creating a new contents, and setting a callback.
Log.i(TAG, "Creating new contents.");
//final Bitmap image = mBitmapToSave;
Drive.DriveApi.newDriveContents(mGoogleApiClient)
.setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() {
@Override
public void onResult(DriveApi.DriveContentsResult result) {
// If the operation was not successful, we cannot do anything
// and must
// fail.
if (!result.getStatus().isSuccess()) {
Log.i(TAG, "Failed to create new contents.");
return; …Run Code Online (Sandbox Code Playgroud) android google-api google-api-client google-drive-android-api android-googleapiclient
从官方得知
ViewModel 类旨在以生命周期意识的方式存储和管理 UI 相关数据
但我认为很多开发人员ViewModel同时用作数据存储和控制器(例如调用存储库、数据的网络客户端)。我还使用 as 作为数据存储和视图控制器。
Android官方示例代码也有一些控制器逻辑。来自官方:
class MyViewModel : ViewModel() {
private val users: MutableLiveData<List<User>> by lazy {
MutableLiveData().also {
loadUsers()
}
}
fun getUsers(): LiveData<List<User>> {
return users
}
private fun loadUsers() {
// Do an asynchronous operation to fetch users.
}
}
Run Code Online (Sandbox Code Playgroud)
这里loadUsers可能会调用一些Repository或NetworkClient。所以在这里它就像控制器一样。
我确信许多开发人员都这样做,但从定义上看ViewModel应该存储和管理 UI 相关数据,应该ViewModel充当控制器吗?
我发现了一些 stackoverflow 线程这个和这个关于这个。
第一个接受的答案建议不要用作ViewModel控制器并使用 …
android android-mvp android-viewmodel android-architecture-components
我在 Android 项目中使用 Apollo 客户端。我有 2 个架构文件,并将它们放在 2 个不同的目录中。
但是当我构建一个项目来通过 Apollo 生成代码时,它给了我一个错误:
ApolloGraphQL: By default, only one schema.json file is supported.
并建议我使用多个服务 构建输出:
ApolloGraphQL: By default, only one schema.json file is supported. Please use multiple services instead:
apollo {
service("search") {
sourceFolder = "/.../app/src/main/graphql/com/example/data/search"
}
service("customer") {
sourceFolder = "/.../app/src/main/graphql/com/example/data/customer"
}
}
Run Code Online (Sandbox Code Playgroud)
我还将其添加到我的build.gradle(应用程序级别)文件中,但仍然显示相同的构建错误。
请建议我如何解决这个错误
我有一个应用程序与本地数据库(房间)和服务,POSTs所有"事件"来自数据库使用retrofit 2和rxjava.当我发送大量POSTs(即1500+)时,应用程序会抛出一个OutOfMemoryException.我认为这是因为每次客户端发送新POST时它都会启动一个新线程.有没有办法阻止retrofit/ rxJava创建这么多线程?或者等待服务器响应是否更好?这是我的代码:
从本地db检索所有事件的类
public class RetreiveDbContent {
private final EventDatabase eventDatabase;
public RetreiveDbContent(EventDatabase eventDatabase) {
this.eventDatabase = eventDatabase;
}
@Override
public Maybe<List<Event>> eventsList() {
return eventDatabase.eventDao().getAllEvents()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,我有一个服务,它通过db事件列表迭代并发布所有这些服务.如果后端发回成功,则从本地数据库中删除该事件.
private void sendDbContent() {
mRetreiveDbContent.eventsList()
.subscribe(new MaybeObserver<List<Event>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(final List<Event> events) {
Timber.e("Size of list from db " + events.size());
final CompositeDisposable disposable = new CompositeDisposable(); …Run Code Online (Sandbox Code Playgroud) 我正在努力思考Dagger 2,但遇到了一种情况,我不太确定如何正确解决。我用来dagger.android设置subcomponents每个活动和片段,其中每个子组件都有一个具有自己的依赖项的演示者。
问题是一个片段应该显示从网络获取的信息,因此我将 a 传递URL给片段以告诉它要显示什么。但我不确定如何Dagger解决对片段加载的依赖。我以为我需要一个subcomponent builder,但这显然是多余的,因为编译器消息告诉我它需要来自URL一个Provides方法。我还为 设立了一个限定符,URL并用它注释了片段中的一个方法。我以为Dagger可以捡起来,但我错了。有人可以告诉我如何最好地处理这种情况吗?
android ×12
dagger ×2
android-architecture-components ×1
android-mvp ×1
animation ×1
apollo ×1
dagger-2 ×1
google-api ×1
graphql ×1
graphql-java ×1
layout ×1
line ×1
mobile ×1
mvvm ×1
opengl ×1
post ×1
xml ×1