小编Sam*_*net的帖子

通过改造和rxjava 2.x处理空响应

当使用rxjava 1.xi用于返回Observable<Void>处理来自改造的空响应时:

@POST( "login" )
Observable<Void> getToken( @Header( "Authorization" ) String authorization,
                                       @Header( "username" ) String username,
                                       @Header( "password" ) String password );
Run Code Online (Sandbox Code Playgroud)

但是因为rxjava 2.x不会发出任何东西,Void是否有任何好的做法来处理那些空的响应?

android rx-java rx-java2

21
推荐指数
2
解决办法
7051
查看次数

嵌套的recyclerview视图,例如Play Play Store应用

我正在尝试像Play Store应用首页一样使用CardView制作嵌套的recyclerview,到目前为止,它的工作原理还不如Play Store流畅。

当回收站视图滚动位置为0并且开始向右拖动时,边缘效果将如预期的那样出现,但是不久我继续向上拖动时,好像我的水平回收站视图失去了焦点,父级垂直视图接管了。从Play商店应用中,从边缘水平拖动后继续向上拖动时,您不会失去焦点。我坚持认为只有在回收者视图边缘时才会发生这种情况。

在此处输入图片说明

除此之外(这可能是相关的),从Play Store应用启动水平滚动看起来更容易,这意味着如果您从PlayStore应用启动了与水平方向成30°角的拖动,则会启动水平滚动,但是从我的应用中启动似乎我需要最大10°角才能启动我的地雷,否则垂直滚动接管。

这是我的垂直回收机视图代码(在协调器布局内部):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          style="@style/AppStyle.Fragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:background="?attr/colorPrimary"
        android:gravity="center"
        android:text="weather / places"
        android:textColor="@android:color/white"/>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

--

mList.setLayoutManager( new LinearLayoutManager( getContext( ),
                                                LinearLayoutManager.VERTICAL,
                                                     false ) );
mList.setAdapter( new HomeAdapter( ) );
Run Code Online (Sandbox Code Playgroud)

这是嵌套的水平之一:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:orientation="vertical"
          android:padding="@dimen/screen_padding">

<TextView
    android:id="@+id/title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fontFamily="sans-serif-medium"
    android:paddingLeft="4dp"
    android:paddingRight="4dp"
    android:textSize="18sp"
    tools:text="hello world"/>

<Space
    android:layout_width="match_parent"
    android:layout_height="10dp"/>

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_marginLeft="4dp"
    android:layout_marginRight="4dp"
    android:background="@color/divider"/>

<Space
    android:layout_width="match_parent"
    android:layout_height="20dp"/>

<android.support.v7.widget.RecyclerView
    android:id="@+id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" …
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview

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

使用新的Android架构(MVVM)的活动片段通信

目标是从a获取信息Fragment,以便托管Activity可以显示它.让我们举个简单的例子,假设Fragment我们想要在Fragment我们Activity的动作栏中显示标题.

这是我以前的做法:

Activity

@Override
protected void onCreate( @Nullable Bundle savedInstanceState )
{
    super.onCreate( savedInstanceState );

    getSupportFragmentManager().addOnBackStackChangedListener( this );
}

@Override
public void onBackStackChanged( )
{
    BaseFragment fragment = mNavigationManager.getCurrentFragment( );

    if( fragment != null && fragment instanceof ActionBarProvider )
        mActionBarTitle.setText( ( ( ActionBarProvider ) fragment ).getTitle( ) );
}
Run Code Online (Sandbox Code Playgroud)

ActionBarProvider

public interface ActionBarProvider
{
    String getTitle( );
}
Run Code Online (Sandbox Code Playgroud)

分段

// implements ActionBarProvider

@Override
protected String getTitle( )
{
    return "Hello …
Run Code Online (Sandbox Code Playgroud)

android mvvm

4
推荐指数
1
解决办法
1614
查看次数

Kotlin 使用 reified 获取泛型类

我刚开始使用 Kotlin 而不是 Java,我正在努力进行重新工作以检索泛型类型类。这是我的用例

abstract class BaseDataFragment<VM : BaseViewModel> : BaseFragment()
{
    @Inject
    protected lateinit var viewModelProvider: ViewModelProvider
    protected lateinit var viewModel: VM

    @CallSuper
    override fun init(savedInstanceState: Bundle?)
    {
        viewModel = viewModelProvider.get(getViewModelClass())
    }

    private inline fun <reified T : ViewModel> getViewModelClass():Class<T> = T::class.java
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到一个错误getViewModelClass()

不能使用“VM”作为具体化的类型参数。改用类。

有没有办法让它工作?

android kotlin

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

dagger recyclerview layoutmanager 注入

我正在尝试使用片段中的匕首注入 recyclerview layoutmanager,问题是当我返回到包含该注入的片段时,我得到了另一个 recyclerview 已经在使用 layoutmanager 的错误原因。实际上离开片段销毁片段视图并回到它只重新创建片段视图而不是片段实例本身,因此布局管理器注入仍然是同一个实例。这是我的代码,使事情更清楚:

从活动模块:

@PerFragment
@ContributesAndroidInjector( modules = ProductListFragmentModule.class )
abstract ProductListFragment contributeProductListFragment( );
Run Code Online (Sandbox Code Playgroud)

ProductListFragmentModule 匕首模块

@Provides
@PerFragment
public static RecyclerView.LayoutManager provideProductListLayoutManager(
        @ActivityContext Context context,
        FlexibleAdapter< AbstractFlexibleItem< ? extends BaseViewHolder > > flexibleAdapter )
{
    int totalSpanSize = 6;
    GridLayoutManager gridLayoutManager = new GridLayoutManager( context,
                                                                 totalSpanSize,
                                                                 LinearLayoutManager.VERTICAL,
                                                                 false );

    gridLayoutManager.setSpanSizeLookup( new GridLayoutManager.SpanSizeLookup( )
    {
        @Override
        public int getSpanSize( int position )
        {
            IFlexible item = flexibleAdapter.getItem( position );

            if( item != null && item instanceof GridLayoutItem …
Run Code Online (Sandbox Code Playgroud)

android dagger-2

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