小编Rez*_*adi的帖子

对象字段更改的LiveData更新

我正在使用带有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)

android observable android-livedata android-viewmodel

33
推荐指数
5
解决办法
3万
查看次数

如何显式启动另一个模块中的活动

我创建了一个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)

我真的不想为每个使用它的项目更改我的模块.

android android-intent android-library aar

15
推荐指数
2
解决办法
1万
查看次数

使用嵌套片段和动画对象

我有片段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个选项:

  1. 目标api等级4.2及更高,这将花费我超过一半的客户.这对我来说不是一个合适的选择!
  2. 不使用嵌套片段,因为动画是我的应用程序的重要组成部分.

那么有什么其他方式可以使用支持库嵌套片段和翻转卡动画?

animation android android-fragments objectanimator android-nested-fragment

8
推荐指数
1
解决办法
278
查看次数

使用StaggeredGridLayoutManager时停止移动项目

我正在android中使用recyclelerview和staggredGridLayoutManager.问题是,有时当滚动项目移动以适应屏幕时.通常情况下没什么可担心的,但在我的情况下它会弄乱一切!那么无论如何都要阻止这种行为?不只是动画.整件物品重新整理东西.谢谢

android staggered-gridview android-recyclerview

8
推荐指数
1
解决办法
2925
查看次数

强制RecyclerView调用onCreateViewHolder

我有一个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的东西?

任何不使用多个适配器的解决方案都足够好了!

android android-adapter android-recyclerview

7
推荐指数
1
解决办法
8635
查看次数

如何在翻新GET请求中发送对象参数?

我有一个像这样的后端服务器

"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)

我想知道是否有更好更好的方法?任何建议将不胜感激。

android gson android-networking retrofit retrofit2

7
推荐指数
2
解决办法
4778
查看次数

如何为Android Navigation Controller编写测试

我正在使用目前处于alpha状态的新导航控制器.它工作正常,但我找不到任何文档或示例应用程序,以了解如何进行测试.谷歌也发布了android.arch.navigation:navigation-testing用于测试导航的库,但同样没有文档.

任何帮助或建议将不胜感激.

android android-testing android-jetpack android-architecture-navigation

7
推荐指数
2
解决办法
390
查看次数

Android中内存泄漏的潜在原因

我正在使用leakcaneryAndroid中查找内存泄漏.我发现并修复了所有Activity泄漏.(惊讶地知道有那么多BTW!).我还refWatcher为我Fragment的所有人添加了手表.

问题1:我还应该注意哪些可能会导致明显的内存泄漏?

问题2:Fragment由于Fragment持有对它的引用,是不是在观察泄漏多余Activity?我收到了通知,对吗?: - /

问题3:当我检查android studio中的内存监视器时,它显示了内存使用量随时间的增长.这是一个巨大的内存泄漏的迹象还是Android操作系统是善良的,它只是给了我更多的内存?我怎么能找到肯定的?

java android garbage-collection memory-leaks

6
推荐指数
1
解决办法
1207
查看次数

具有多个堆栈的Android JetPack导航

我正在将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

6
推荐指数
1
解决办法
4794
查看次数

Gradle 应用 kotlin-allopen 插件仅用于测试

我有一个使用 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 mockito gradle kotlin kotlin-allopen

6
推荐指数
0
解决办法
1318
查看次数