我正在使用带有LiveData的Android MVVM架构.我有一个像这样的对象
public class User {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Run Code Online (Sandbox Code Playgroud)
我的视图模型看起来像这样
public class InfoViewModel extends AndroidViewModel {
MutableLiveData<User> user = new MutableLiveData<>();
public InfoViewModel(@NonNull Application application) {
super(application);
User user = new User();
user.setFirstName("Alireza");
user.setLastName("Ahmadi");
this.user.setValue(user);
}
public LiveData<User> getUser(){
return user;
}
public void …Run Code Online (Sandbox Code Playgroud) 我创建了一个aar,并将其作为模块添加到我的项目中.在这个模块中,我有一个我想要运行的HelloWorldActivity.
我的模块清单看起来像这样.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ir.sibvas.testlibary1.HelloWorldActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="ir.sibvas.testlibary1.HelloWorldActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
现在我可以使用此代码从我的项目开始此活动
Intent intent = new Intent("ir.sibvas.testlibary1.HelloWorldActivity");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
但正如你可以看到这个代码是隐含的,隐式调用的问题是,如果我在多个应用程序中使用此模块,两者都安装在用户设备上,它将向用户显示应用程序选择器对话框.那么如何才能使这个调用显式化,阻止用户切换应用?
此代码将无法运行,因为HelloWorldActivity与调用活动不在同一个包中
Intent intent = new Intent(this, HelloWorldActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我真的不想为每个使用它的项目更改我的模块.
我有片段A,其中包含两个片段,片段B和片段C.我想将片段B添加到片段A,getChildFragmentManager()然后使用此代码通过卡片翻转动画将片段C替换为片段C
getChildFragmentManager()
.beginTransaction()
.setCustomAnimations(
R.animator.card_flip_right_in, R.animator.card_flip_right_out,
R.animator.card_flip_left_in, R.animator.card_flip_left_out)
.replace(R.id.fragment_new_word_container, new FragmentCardBack())
.addToBackStack(null)
.commit();
Run Code Online (Sandbox Code Playgroud)
在Android 4.2中引入的嵌套片段在早期版本中使用它我们可以使用支持库.一切都很好,到这里来.问题是支持库中的FragmentManager不支持对象动画师.所以它似乎只有2个选项:
那么有什么其他方式可以使用支持库嵌套片段和翻转卡动画?
animation android android-fragments objectanimator android-nested-fragment
我正在android中使用recyclelerview和staggredGridLayoutManager.问题是,有时当滚动项目移动以适应屏幕时.通常情况下没什么可担心的,但在我的情况下它会弄乱一切!那么无论如何都要阻止这种行为?不只是动画.整件物品重新整理东西.谢谢
我有一个recyclerview可以显示项目列表,小网格或大网格,这可以在运行时更改.根据用户选择的样式,我在onCreateViewHolder中扩展不同的布局.
我也RecyclerView用来在样式之间切换.我的代码看起来像这样
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if(showType == ProductAdapter.SHOW_TYPE_SMALL_GRID)
return 1;
else
return columnCount; //show one item per row
}
});
@Override
public void onClick(View v) {
if(showType == ProductAdapter.SHOW_TYPE_SMALL_GRID)
showType = ProductAdapter.SHOW_TYPE_LARGE_GRID;
else
showType = ProductAdapter.SHOW_TYPE_SMALL_GRID;
int firstVisibleItem = layoutManager.findFirstVisibleItemPosition();
adapter = new ProductAdapter(getActivity(), productList, showType);
recyclerView.setAdapter(adapter);
layoutManager.scrollToPosition(firstVisibleItem);
}
Run Code Online (Sandbox Code Playgroud)
问题是强制onCreateViewHolder被调用我每次用户更改样式时都会创建一个新的Object.还有其他办法吗?!强制onBindViewHolder()被召回我只是使用onCreateViewHolder我怎样才能获得类似onCreateViewHolder的东西?
任何不使用多个适配器的解决方案都足够好了!
我有一个像这样的后端服务器
"api/videos?search_object={"cat_id" :2, "channel_id" : 3, etc}
Run Code Online (Sandbox Code Playgroud)
您可以轻松地将搜索对象作为输入,它会基于该对象过滤列表。现在,我想将此服务与Retrofit一起使用,就像这样
@GET("videos")
Call<VideoListResponse> listVideos(@Query("search_object") VideoSearchObject videoSearchObject);
Run Code Online (Sandbox Code Playgroud)
但是上面的代码不起作用,我可以先将VideoSearchModel转换为JSON字符串,然后将其传递给它进行改造
@GET("videos")
Call<VideoListResponse> listVideos(@Query("search_object") String jsonString);
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好更好的方法?任何建议将不胜感激。
我正在使用目前处于alpha状态的新导航控制器.它工作正常,但我找不到任何文档或示例应用程序,以了解如何进行测试.谷歌也发布了android.arch.navigation:navigation-testing用于测试导航的库,但同样没有文档.
任何帮助或建议将不胜感激.
android android-testing android-jetpack android-architecture-navigation
我正在使用leakcaneryAndroid中查找内存泄漏.我发现并修复了所有Activity泄漏.(惊讶地知道有那么多BTW!).我还refWatcher为我Fragment的所有人添加了手表.
问题1:我还应该注意哪些可能会导致明显的内存泄漏?
问题2:Fragment由于Fragment持有对它的引用,是不是在观察泄漏多余Activity?我收到了通知,对吗?: - /
问题3:当我检查android studio中的内存监视器时,它显示了内存使用量随时间的增长.这是一个巨大的内存泄漏的迹象还是Android操作系统是善良的,它只是给了我更多的内存?我怎么能找到肯定的?
我正在将Jetpack Navigation version 1.0.0-alpha04与底部导航一起使用。它可以工作,但导航无法正确进行。例如,如果我有选项卡A和选项卡B,然后从选项卡AI转到页面C,然后从那里转到选项卡B,然后再次返回到选项卡A,我将在选项卡A中看到根片段,而在页面C中看不到根片段不是我所期望的。
我正在寻找一种解决方案,以使每个选项卡具有不同的堆栈,因此当我返回到每个选项卡时,每个选项卡的状态都将保留,而且我也不喜欢将所有这些片段都保留在内存中,因为它的性能很差。对性能的影响,在jetpack导航之前,我使用了这个库https://github.com/ncapdevi/FragNav,它的作用是什么,现在我在寻找与jetpack导航相同的东西。
android android-architecture-components android-jetpack android-architecture-navigation
我有一个使用 Kotlin 的 android 模块,通过使用 kotlin-all 开放类,我确保我仍然可以使用 Mockito 模拟我的 Kotlin 类。问题是这种方法使得我的 Kotlin 类也在测试之外开放,现在有人可以扩展这个类,但我不想允许。
这是我的配置
apply plugin: "kotlin-allopen"
allOpen {
annotation("com.me.Open")
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来启用此插件仅用于测试,允许模拟 Kotlin 类,同时停止 Kotlin 非开放类的扩展。任何想法?
顺便说一句,我不想使用mockito-inline插件,因为它明显减慢了我们的测试速度。
android ×10
android-architecture-navigation ×2
aar ×1
android-architecture-components ×1
animation ×1
gradle ×1
gson ×1
java ×1
kotlin ×1
memory-leaks ×1
mockito ×1
observable ×1
retrofit ×1
retrofit2 ×1