小编azi*_*ian的帖子

在backstack中添加新片段时,onBackStackChanged()调用两次

所以,我注意到有趣的问题.当我以编程方式添加新片段时,OnBackStackChangedListener中的onBackStackChanged方法被调用两次,但它必须只调用一次.这是我的活动代码:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements FragmentManager.OnBackStackChangedListener{

    private FragmentManager fragmentManager;
    private Button button1;
    private Button button2;
    private Button button3;

    private Fragment defaultFragment;
    private Fragment previousFragment;
    private Fragment currentFragment;
    private String currentFragmentTag;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button1 = (Button) findViewById(R.id.button);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3);

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showFragment(new FragmentOne(), FragmentOne.TAG);
            }
        }); …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments android-view fragmentmanager

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

过滤RxJava中的对象列表

我试图根据它的属性过滤列表.例如,Sensors类有一个属性isActive,我想用isActiveas 获取所有对象,true但我无法做到.我尝试了不同的方法,但我没有找到解决方案.有人可以帮我做吗?

这是我的代码:

mCompositeDisposable.add(
                fcService.getStationList()
                        .subscribeOn(Schedulers.io())
                        .flatMap( stations ->   {
                            return fcService.getSensorList(stations.get(0).getName().getOriginal());
                        })
                        .subscribe(this::handleSensors, this::handleError)
        );
Run Code Online (Sandbox Code Playgroud)

android reactive-programming rx-java rx-android rx-java2

10
推荐指数
2
解决办法
8504
查看次数

BitmapDrawable构造函数中的"资源"到底是什么?

由于BitmapDrawable不推荐使用无参数构造函数,我们必须为构造函数提供资源ID.

BitmapDrawable bitmapDrawable = new BitmapDrawable(res, bmap);
Run Code Online (Sandbox Code Playgroud)

res一般在哪里getResources().

为什么构造函数需要它,如果我们使用通用图像缓存,我们如何定义该值?

android android-resources android-drawable bitmapdrawable android-bitmap

9
推荐指数
2
解决办法
638
查看次数

类别偏好后的物料分隔符

我试图用物质主题来塑造我的喜好,而且几乎就在那里.

我导入了以下内容:

compile 'com.android.support:preference-v7:25.1.0'
compile 'com.android.support:preference-v14:25.1.0'
Run Code Online (Sandbox Code Playgroud)

然后在我的主应用主题中设置首选项主题:

<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
Run Code Online (Sandbox Code Playgroud)

我的偏好屏幕看起来很不错.我唯一的问题是类别没有空间或视觉分离,使得所有偏好看起来非常混乱.

材质设计文档显示的分隔符看起来像顶部和底部阴影(设备类别上方的IE):

几个问题:

  1. android提供这个吗?如果有,那么有更新的appcompat主题吗?或者其他我做错了什么?

  2. 如果android尚未在材质首选项主题中提供此分隔符,那么有人创建了它吗?我看到了这一点,他创建了一个带有自定义布局的新类别,PreferenceFragment中的类别之间的Divider.但我不完全确定如何创造所需的效果.

android android-preferences android-layout android-view material-design

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

9
推荐指数
3
解决办法
1703
查看次数

在同一活动中RecyclerView项和CollapsingToolbar之间的共享元素动画

在我的应用程序中,我有一个通过RecyclerView适配器显示的项目列表.如果我点击一个项目Fragment,则在同一个项目中启动Activity.我的项目的布局和我的活动看起来(简化)像这样:

活动布局:

<android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.AppBarLayout>

        <android.support.design.widget.CollapsingToolbarLayout>

            <ImageView
                android:id="@+id/image"
                android:transitionName="image" ... />

            <android.support.v7.widget.Toolbar ... />

        </android.support.design.widget.CollapsingToolbarLayout>

        <android.support.design.widget.TabLayout ... />

    </android.support.design.widget.AppBarLayout>

    <FrameLayout... />

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

物品布局:

<RelativeLayout >

    <ImageView
        android:id="@id/itemImage"
        android:transitionName="image" />

    <LinearLayout>

        <TextView ... />

        <TextView ... />

    </LinearLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

现在,如果新片段通过项目点击开始,我想的物品图像的动画添加到ImageViewCollapsingToolbarLayout.我阅读有关ShareElement动画的文章,但这不适用于此,因为这不是真正的ShareElement动画.目标ImageView不在新片段中,我也不必开始新活动(我只ImageView在新的目标中显示目标Fragment).那么在这种情况下如何创建这样的动画呢?

animation android android-animation android-layout android-view

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

在travis yml文件上配置gradle.properties android.enableAapt = false

在我的机器人中gradle.properties我有以下内容:

android.enableAapt2=false
Run Code Online (Sandbox Code Playgroud)

gradle.properties位于~/.gradle/gradle.properties我的本地机器中.

我想知道如何添加android.enableAapt=false到我的yml文件.

我试图在全局下添加它但是没有工作没有错误但是robolectric如果你使用的话需要设置它gradle:3.0.0-beta3.

language: android

jdk: oraclejdk8

env:
  global:
    - ANDROID_TARGET=android-25
    - ANDROID_ABI=armeabi-v7a
    - android.enableAapt2=false

android:
  components:
  - tools
  - platform-tools
  - build-tools-25.0.3
  - android-25
  - extra-android-m2repository
  - sys-img-${ANDROID_ABI}-${ANDROID_TARGET}


licenses:
  - android-sdk-license-.+
  - '.+'

script:
    - ./gradlew --daemon build jacocoTestReport --info

after_success:
    - bash <(curl -s https://codecov.io/bash)
Run Code Online (Sandbox Code Playgroud)

以下是travis-ci上的配置文件

{
  "language": "android",
  "jdk": "oraclejdk8",
  "android": {
    "components": [
      "tools",
      "platform-tools",
      "build-tools-25.0.3",
      "android-25",
      "extra-android-m2repository",
      "sys-img-${ANDROID_ABI}-${ANDROID_TARGET}"
    ]
  },
  "licenses": …
Run Code Online (Sandbox Code Playgroud)

continuous-integration android aapt continuous-delivery travis-ci

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

在RecycleView适配器中实现多个ViewHolder类型

这可能是一个讨论而不是一个问题.

正常的方式来实现多种类型

如您所知,如果我们想要实现多种类型RecyclerView,我们应该提供多种CustomViewHolder扩展RecyclerView.ViewHolder.

对于exmpale,

class TextViewHolder extends RecyclerView.ViewHolder{
    TextView textView;
}

class ImageViewHolder extends RecyclerView.ViewHolder{
    ImageView imageView;
}
Run Code Online (Sandbox Code Playgroud)

然后我们必须覆盖getItemViewType.并onCreateViewHolder进入构造TextViewHolderImageViewHolder.

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == 0) {
        return new ImageViewHolder(mLayoutInflater.inflate(R.layout.item_image, parent, false));
    } else {
        return new TextViewHolder(mLayoutInflater.inflate(R.layout.item_text, parent, false));
    }
} 
Run Code Online (Sandbox Code Playgroud)

上面的代码是正常的,但还有另一种方式.

其他方式

我想只有一个CustomViewHolder就足够了.

 class MultipleViewHolder extends RecyclerView.ViewHolder{
    TextView textView;
    ImageView imageView;

    MultipleViewHolder(View itemView, int type){
       if(type == …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-view android-viewholder android-recyclerview

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

在状态栏下方显示DialogFragment内容

我试图显示一个带有match_parent的DialogFragment高度和宽度,但它发生在顶部,DialogFragment显示在StatusBar下面.

DialogFragment在底部,右侧,左侧和顶部应用了一些默认值.但顶部填充应从statusBar开始计数,而不是从总屏幕大小开始计算.

如何将DialogFragment设置为match_parent,但是在顶部,底部,右侧,左侧具有正常/默认填充?

android android-dialog android-windowmanager android-dialogfragment android-window

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

Kotlin和Java String之间的区别与Regex分开

如果我们有一个val txt: kotlin.String = "1;2;3;"并且喜欢将它拆分成数组,我们可以尝试以下方法:

val numbers = string.split(";".toRegex())
//gives: [1, 2, 3, ]
Run Code Online (Sandbox Code Playgroud)

尾随空String包含在结果中CharSequence.split.

另一方面,如果我们看一下Java String,结果是不同的:

val numbers2 = (string as java.lang.String).split(";")
//gives: [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

这次使用时java.lang.String.split,结果不包括尾随空String.这个行为实际上是给定相应的JavaDoc:

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样.因此,结尾的空字符串不包含在结果数组中.

在科特林的版本,虽然,0也就是默认limit的文件的说法在这里,但内部科特林地图,0负的值-1时,java.util.regex.Pattern::split称为:

nativePattern.split(input, if (limit == 0) -1 else limit).asList()
Run Code Online (Sandbox Code Playgroud)

它似乎按预期工作但我想知道为什么该语言似乎限制Java API,因为0不再提供限制.

java regex string kotlin

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