小编Ale*_*r G的帖子

将支持库从"23.1.1"升级到"23.2.1"后,Recycler视图项填满整个回收站视图高度

以前,我使用以下旧的支持库"23.1.1".

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:preference-v7:23.1.1'
compile 'com.android.support:preference-v14:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
Run Code Online (Sandbox Code Playgroud)

它工作得很好.这就是我的RecyclerView样子

在此输入图像描述

现在,由于修复了一些错误,我希望迁移到"23.2.1".

compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:support-v4:23.2.1'
compile 'com.android.support:preference-v7:23.2.1'
compile 'com.android.support:preference-v14:23.2.1'
compile 'com.android.support:design:23.2.1'
compile 'com.android.support:recyclerview-v7:23.2.1'
Run Code Online (Sandbox Code Playgroud)

然而,突然之间,我所有的RecyclerView物品,似乎都填满了RecyclerView整个高度.

在此输入图像描述

在此输入图像描述

这是我的布局文件的代码片段:https://gist.github.com/yccheok/241a0d38d56305a1be24d09b54eb1600

让我感到困惑的是,尽管我"wrap_content"在我的回收站视图项目布局中使用它,但它并没有按预期工作.

我没有使用任何自定义布局管理器RecyclerView.

http://developer.android.com/tools/support-library/index.html,我意识到23.2.1在RecyclerView这个时候做了很多改变.

  • 修复了与各种测量规范方法相关的错误.(问题201856)
  • RecyclerView在计算布局或滚动时减少了不允许适配器更改的锁定时间.(问题202046)
  • 修复了调用notifyItemChanged()不在视图中的项目时发生崩溃的问题.(问题202136)
  • 修复了RecyclerView.LayoutManager在同一测量过程中添加和删除视图时发生的崩溃.(问题193958)

我最怀疑的是https://code.google.com/p/android/issues/detail?id=201856,因为它涉及更改各种测量规范方法

到目前为止,我尝试使用一个简单的RecyclerView项目重现问题,使用23.2.1但是失败了!它没有"项目填满RecyclerView整个高度"的问题.我的猜测是,我的简单项目不能模拟生产项目的复杂布局结构.我的制作项目有以下布局

<Activity>
    <Fragment>
        <View Pager>
            <Fragment>
                <RecyclerView />
            </Fragment>
        </View Pager>
    </Fragment>
</Activity>
Run Code Online (Sandbox Code Playgroud)

经过几个小时的调试,我还是找不到这个问题的根本原因,有什么提示吗? …

android android-support-library android-recyclerview android-support-design

44
推荐指数
4
解决办法
3万
查看次数

CardView layout_margin无效

我正在玩新的CardView,但边缘似乎没有应用.

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:layout_marginLeft="18dp"
android:layout_marginRight="18dp"
card_view:cardCornerRadius="4dp"
card_view:cardBackgroundColor="#FFA"
card_view:layout_margind="4dp">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

<TextView
    android:id="@+id/info_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"/>

</LinearLayout>

</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我在ViewPager中的片段中使用它.该卡扩展了屏幕的整个宽度(match_parent),即使我在CardView上使用android:layout_marginLeft ="18dp"和android:layout_marginRight ="18dp".

我有什么想法可能做错了吗?

android android-viewpager android-cardview

35
推荐指数
3
解决办法
2万
查看次数

Android ExoPlayer onProgressChanged

如何监控进度变化ExoPlayer
我试图实现隐藏MediaController和重写的setOnSeekBarChangeListener方法,但现在没有成功.我想知道是否有另一种方式来倾听ExoPlayer进展.

android progress listener exoplayer

32
推荐指数
5
解决办法
2万
查看次数

RecyclerView.ViewHolder的部分更新

我正试图在我的时间里随着时间改变这个领域RecyclerView.每个人都ViewHolder包含一个CardView和更多的内部视图.我想要制作动画的唯一视图是有时间的视图.如您所见,没有动画:

adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

RecyclerView没有动画

逐个更新项目无济于事,因为整个CardView闪烁:

int len = adapter.getItemCount();
for(int i=0;i<len;i++) {
    adapter.notifyItemChanged(i);
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有没有办法获得所有的列表ViewHolders然后更新(动画)TextView每个内部的那个?

animation android android-recyclerview

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

Android主线程阻塞WebView线程

我一直在研究一个问题,即在一个WebView(带有返回值)中对JavaScript进行同步调用,并试图缩小它为什么不起作用的地点和原因.WebView当主线程正在等待来自它的响应时,似乎线程正在阻塞 - 自从在WebView单独的线程上运行以来不应该是这种情况.

我把这个小样本放在一起,相当清楚地展示了它(我希望):

main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:weightSum="1">

    <WebView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/webView"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

MyActivity.java:

package com.example.myapp;

import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.JavascriptInterface;
import android.webkit.WebViewClient;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

public class MyActivity extends Activity {

    public final static String TAG = "MyActivity";

    private WebView webView;
    private JSInterface JS;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        webView = (WebView)findViewById(R.id.webView);
        JS = …
Run Code Online (Sandbox Code Playgroud)

javascript java multithreading android webview

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

使用Facebook的FirebaseUI身份验证无效

我正在使用FirebaseUI-Authentication.使用电子邮件或Google帐户登录是成功的,但使用Facebook登录无效.onActivityResult()AuthUI活动开始并尝试使用Facebook登录后未调用.登录后尝试将应用程序停留在加载窗口.logcat输出FirebaseApp日志:

通知背景状态更改侦听器.

在Facebook应用程序仪表板上,我设置了有效的OAuth重定向URI,正如firebase指南所述,我将应用程序设置为公共(如果它是公共的还是处于开发状态,这是否重要?).在Firebase控制台中,我启用了Facebook登录并设置了App IDApp secret.

是一个视频录制,显示点击登录活动后登录Facebook后发生的情况.

为什么不onActivityResult()叫?

主要活动:

/**
 * Use this method to start the FirebaseUI sign in activity.
 */
public void switchToSignIn() {
    this.activity.startActivityForResult(
            AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setProviders(
                            AuthUI.EMAIL_PROVIDER,
                            AuthUI.GOOGLE_PROVIDER,
                            AuthUI.FACEBOOK_PROVIDER)
                    .build(), RC_SIGN_IN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RC_SIGN_IN) {
        if (resultCode == this.activity.RESULT_OK) {
            // user is signed in!
            Log.d(Constants.TAG_LoginHandler, …
Run Code Online (Sandbox Code Playgroud)

android facebook-authentication firebase firebase-authentication firebaseui

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

rxandroid要求在ui线程上运行,即使它是在AndroidSchedulers.mainThread()上订阅的

我写了一个订阅者,当谷歌地图被触发时会OnCameraChangeListener被触发.

Observable.create(new Observable.OnSubscribe<LatLng>()
    {
        @Override
        public void call(Subscriber<? super LatLng> subscriber)
        {
            if (!subscriber.isUnsubscribed())
            {
                mMap.setOnCameraChangeListener(cameraPosition ->
                        subscriber.onNext(cameraPosition.target));
            }
        }
    }).subscribeOn(AndroidSchedulers.mainThread())
            .observeOn(AndroidSchedulers.mainThread())
            .onErrorResumeNext(Observable.<LatLng>empty())
            .debounce(1, TimeUnit.SECONDS)
            .subscribe(position -> {
                if (position.latitude != 0 && position.longitude != 0)
                {
                    updateLocationMarker(position);
                }
            });
Run Code Online (Sandbox Code Playgroud)

我正在更新位置标记,如下所示:

private void updateLocationMarker(LatLng center)
{
    locationMarkertext.setText("Lat:" + center.latitude + " Long:" + center.longitude);
    //locationMarkerLayout.setVisibility(View.VISIBLE);
}
Run Code Online (Sandbox Code Playgroud)

即使我的代码说要运行AndroidSchedulers.mainThread()我也会收到此错误:

引发者:rx.exceptions.OnErrorNotImplementedException:只有创建视图层次结构的原始线程才能触及其视图.

有人可以帮我理解我的方法有什么问题

android rx-java

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

突然在CoordinatorLayout Android内的ViewPager Fragment中使用NestedScrollView滚动

ViewPager内心面临一个重大的滚动问题CoordinatorLayout.

当前场景:

  1. app:appbarScrollingViewBehaviour已开启ViewPager.
  2. ViewPager片段具有NestedScrollView其根父母.
  3. 片段布局包含Horizo​​ntal RecyclerView.
  4. 当我通过触摸向上滚动时RecyclerView,应用栏不会滚动,而是仅进行嵌套滚动.
  5. 当我通过触摸视图的其余部分滚动时,CoordinatorLayout滚动.6)嵌套滚动也在中途停止并切断内容.

我已经尝试过了:

  1. ViewPager里面NestedScrollView并设置 app:appbarScrollingViewBehaviour属性NestedScrollView.这完全切断了碎片内容,因为RecyclerView无法确定其高度.
  2. 设置setAutoMeasureEnabled(true)RecyclerView,依然没能解决的高度.
  3. 还有很多其他方法.

    请帮助解决这个问题.在上传的.gif文件中可以看到当前行为.我还发布了活动布局和片段布局以及RecyclerView行布局的代码.

谢谢

activity.xml:

<android.support.design.widget.CoordinatorLayout  
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:Customs="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/new_color_primary_skim">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/transparent">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsingLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:elevation="0dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        android:minHeight="?attr/actionBarSize">


        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|enterAlways"
            android:layout_height="?attr/actionBarSize">

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <ImageView …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-recyclerview android-coordinatorlayout

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

YouTubePlayerSupportFragment无法在播放器顶部添加任何视图

我奋斗YouTubePlayerSupportFragment了3天试图让它在滑动片段中运行.它现在显示这个错误,我已经尝试了其他方法并获得NullPointerException.是否有可能放入YouTubePlayerSupportFragment滑动片段?

java.lang.UnsupportedOperationException:com.google.android.youtube.player.YouTubePlayerView.addView(未知)的com.google.android.youtube.player.YouTubePlayerView.a(未知来源)播放器顶部无法添加视图源码)在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)的android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)android.support.v4.app.BackStackRecord .RUN(BackStackRecord.java:742)在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)在android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)在机器人. support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:164)在android.support.v4.view.ViewPager.populate(ViewPager.java:1177)在android.support.v4.view.ViewPager.populate(ViewPager. java:1025)在android.view.View.measure的android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1545)(View.java)位于android.widget.LineoutLayout.measure上的android.widget.Lineout.measureChildBayforeLayout(LinearLayout.java)上的android.view.measureGroup.measureChild.Mangins(ViewGroup.java).在Android.widget.LinearLayout上的android.widget.LinearLayout.measureVertical(LinearLayout.java) .onMeasure(LinearLayout.java)在android.support.design.widget.AppBarLayout.onMeasure(AppBarLayout.java:199)在android.view.View.measure(View.java)在android.view.ViewGroup.measureChildWithMargins(ViewGroup中. JAVA)在android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:668)在android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:735)在android.view.View.measure(查看.java)在android.sview.vision.measure(View.java)的android.view.vision上的android.sview.vision.measure(View.java)的android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1075) .widget.FrameLayout.onMeasure(FrameLayout.java)在android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLay)out.java:135)在android.view.measure.View.measure(View.java)的android.view.measure.View上进行android.view.measure.View中的android.widget.Lineout.measureChildBay前线的Android.widget.Lineout.measureChildBeforeLayout(LinearLayout.java).在Android.view.measure(View.java)的android.view.measure.View中,android.w上的android.w上的android.w上的android.w上的android.w上的android.上的android.view.measure.View(.View.java)的android.widget.Line中的LinearLayout.measureVertical(LinearLayout.java)的LinearLayout.measureVertical(LinearLayout.java) widget.FrameLayout.onMeasure(FrameLayout.java)在android.view.vision.measure(View.java)的android.view.visionGroup.measureChildWithMargins(ViewGroup.java)在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java)at Android.widget.Lineout.measureVertical(LinearLayout.java)位于android.view.measure.View.measure(View.java)的android.widget.Linear.onMeasure(LinearLayout.java),位于android.view.ViewGroup.measureChildWithMargins(ViewGroup.java) )在com.android.internal.policy.PhoneWindow $ D的android.widget.FrameLayout.onMeasure(FrameLayout.java)ecorView.onMeasure(PhoneWindow.java)在android.view.View.measure(View.java)在android.view.ViewRootImpl.performMeasure(ViewRootImpl.java)在android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java)在机器人.在android.view.ViewRootImpl上的android.view.ViewRootImpl.doTraversal(ViewRootImpl.java)中的view.ViewRootImpl.performTraversals(ViewRootImpl.java)在android.view.Choreographer $ CallbackRecord.run(编舞)的TraversalRunnable.run(ViewRootImpl.java)的.java)在android.view.Choreographer.doCallbacks(Choreographer.java)在android.view.Choreographer.doFrame(Choreographer.java)在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java)在android.os.Handler .handleCallback(Handler.java)位于Android.os.Handler.dispatchMessage(Handler.java),位于android.app.Looper.loop(Looper.java),位于android.app.ActivityThread.main(ActivityThread.java),位于java.lang .reflect.Method.invoke(原生方法)

MainActivity.java:

import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
        tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
        tabLayout.addTab(tabLayout.newTab().setText("Tab …
Run Code Online (Sandbox Code Playgroud)

android youtube-api android-youtube-api

11
推荐指数
2
解决办法
1932
查看次数

Android应用程序首次启动启动需要花费更多时间甚至30秒甚至更长时间

以下是应用首次安装时的日志:

05-12 13:16:23.632 28250-28250/com.app.projectName W/System:ClassLoader引用未知路径:/data/app/com.app.projectName-1/lib/arm 05-12 13:16:59.041 28250-28250/com.app.projectName W/System:ClassLoader引用未知路径:/data/app/com.app.projectName-1/lib/arm 05-12 13:16:59.073 28250-28250/com.app. projectName I/MultiDex:版本2.1.0的VM具有multidex支持05-12 13:16:59.073 28250-28250/com.app.projectName I/MultiDex:install 05-12 13:16:59.073 28250-28250/com. app.projectName I/MultiDex:VM具有multidex支持,MultiDex支持库被禁用.

MultiDex在我的项目中使用库它将完全在棒棒糖前设备下工作.这种延迟在Lollipop设备中在第一次应用启动时在30秒到90秒之间变化.

看它不是由于MultiDex对吗?因为时间是1.)初始化05-12 13:16:23.632,第二次登录是在36秒之后,即05-12 13:16:59.041

那个东西创建ClassLoader引用的app延迟.... MultiDex正在快速初始化.以下是截图在此输入图像描述 这需要15秒到30秒,有时甚至更长.

我的Gradle文件是:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:cardview-v7:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:recyclerview-v7:23.4.0'

compile 'com.squareup.picasso:picasso:2.3.2'
compile 'com.bignerdranch.android:expandablerecyclerview:2.1.1'
compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
compile 'org.apache.httpcomponents:httpcore:4.2.4'
compile 'org.apache.httpcomponents:httpmime:4.3'
compile 'com.google.code.gson:gson:2.5'
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
compile 'com.squareup.okhttp3:logging-interceptor:3.1.2'
compile 'co.lujun:androidtagview:1.0.2'

compile …
Run Code Online (Sandbox Code Playgroud)

android delay android-multidex

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