小编Gus*_*avo的帖子

SwipeRefreshLayout 和 TabLayout 问题

我有一个简单的项目,在 MainActivity 中有一个 TabLayout,有 3 个选项卡,每个选项卡都有一个 SwipeRefreshLayout。

如果我拉动以刷新第一个选项卡,然后在第一个选项卡仍在刷新时移动到第三个选项卡,当我返回第一个选项卡时,看起来第一个选项卡上有一个视图,其中包含状态的快照在我移动到第三个选项卡之前的选项卡。我可以滚动项目并正常使用选项卡。

请看下面的图片和我的代码。

我可以关闭“刷新指示器”调用 swipeLayout.setRefreshing(false); 在 ContentFragment 的 onPause 中,但覆盖视图保持在那里。

初始画面

初始画面

屏幕显示问题

屏幕显示问题

主要活动

public class MainActivity extends AppCompatActivity {

    ViewPager viewPager;
    TabLayout tabLayout;

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

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        tabLayout = (TabLayout) findViewById(R.id.tablayout);

        PagerAdapter pageAdapter = new PagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(pageAdapter);

        tabLayout.setupWithViewPager(viewPager);
    }

    static class PagerAdapter extends FragmentPagerAdapter {

        private final int TAB_COUNT = 3;

        public PagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return new ContentFragment(); …
Run Code Online (Sandbox Code Playgroud)

android swiperefreshlayout android-tablayout

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

如何仅从主页中的WebViewClient的新onReceivedError中检测错误

语境

在Android SDK中23 onReceivedError(WebView view, int errorCode, String description, String failingUrl)已被弃用并替换为onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)。但是根据文档

请注意,与弃用的回调版本不同,新版本将针对任何资源(iframe,图片等)调用,而不仅仅是主页

问题

我们有一个应用程序,在不赞成使用的onReceivedError方法中,有一个代码可以显示本机视图,而不是让用户在WebView中看到错误。

我们想onReceivedError用新方法代替不推荐使用的方法。但是我们不想在本机视图中显示任何资源的错误,而只显示主页。

我们如何在新onReceivedError的页面中识别出错误不是来自主页?

PS 1:我们宁愿没有像解决这个存储主网址,并检查它,失败的URL。

PS 2:如果解决方案是仅使用不推荐使用的方法,那么对于新的Android版本仍可以保证调用该方法?

android android-webview webviewclient

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

如何避免非页内广告关闭后重新加载

当我尝试通过插页式广告中的关闭按钮关闭广告时,该特定广告即被关闭。但随后又加载了一个广告。应用程序将以这种方式永远持续下去。

如何避免手动关闭另一个广告后再加载?

这是我的代码:

static View setupListView(final Activity activity, View convertView, final ViewGroup parent,
                              MediaBrowserCompat.MediaItem item) {

        if (sColorStateNotPlaying == null || sColorStatePlaying == null)
            initializeColorStateLists(activity);


        MediaDescriptionCompat description = item.getDescription();
        final MediaItemViewHolder holder;
        Integer cachedState = STATE_INVALID;

        holder = new MediaItemViewHolder();



        if (MediaIDHelper.ADVERTISEMENT.equals(description.getMediaId())) {
            // Advert show
            convertView = LayoutInflater.
                from(activity).
                inflate(R.layout.fragment_list_ad, parent, false);




            try {
                MobileAds.initialize(activity, activity.getString(R.string.admob_app_id));
                holder.mAdView = convertView.findViewById(R.id.itemAd);
                adRequest = new AdRequest.Builder().build();
                holder.mAdView.loadAd(adRequest);
            } catch (Exception ex) {
                Log.e(TAG, ex.getMessage());
            }
            return convertView;
        }
        else if (MediaIDHelper.isItemHeader(description.getMediaId())) { …
Run Code Online (Sandbox Code Playgroud)

java android admob

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

Java中未初始化的常量在抽象类中

我正在写一个抽象课.扩展此类的类将始终使用常量A_CONSTANT,但A_CONSTANT每个子类的值都不同.子类也将实现该方法useConstant.对于每个子类,此实现将是相同的,除了值A_CONSTANT将不同.我希望useConstant在抽象类中实现,但是由于A_CONSTANT尚未在抽象类中初始化,因此会产生错误.

public abstract class AbstractClass {

   public static final int A_CONSTANT;

   public void useConstant(int value) {
      if (value > A_CONSTANT)
         // do something
   }

}
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题,还是我必须useConstant在每个子类中提供实现?

先感谢您!

java abstract

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

迁移到AndroidX时无法解决Gradle版本的错误

当我尝试将自己的项目迁移到AndroidX时,错误消息出现在错误对话框中:

The gradle plugin version in your project build.gradle file needs to be set to at least com.android.tools.build:gradle:3.2.0 in order to migrate to AndroidX.
Run Code Online (Sandbox Code Playgroud)

然后我在互联网上搜索了此错误。发现一个站点,据说classpath 'com.android.tools.build:gradle:3.2.0'必须将其添加到build.gradle中。因此,我将这行代码添加到build.gradle中,如下所示:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 28

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        multiDexEnabled true

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:multidex:1.0.3'
    implementation 'com.android.support:support-core-utils:28.0.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation …
Run Code Online (Sandbox Code Playgroud)

android build.gradle androidx

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

初学者Java - 静态错误

美好的一天!

我是Java的初学者.我无法编译以下代码:

public class Test {
 public static void main (String [] args ){
  int a = calcArea(7, 12);
  System.out.println(a);
 }

 int calcArea(int height, int width) {
  return height * width;
 }
}
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

__CODE__

这是什么意思?我该如何解决这个问题..?

您的回复将受到高度赞赏.谢谢

根据您的建议,我创建了一个新的test()实例,如下所示:

public class Test {
    int num;
    public static void main (String [] args ){
        Test a = new Test();
        a.num = a.calcArea(7, 12);
        System.out.println(a.num);
    }

    int calcArea(int height, int width) {
            return height * width;
    }

}
Run Code Online (Sandbox Code Playgroud)

它是否正确?如果我这样做有什么区别......

public class Test { …
Run Code Online (Sandbox Code Playgroud)

java

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

RxJava - Observable - 多个过滤器调用与一个过滤器调用

我想过滤 Observable 发出的项目,但我有很多过滤条件,我想知道什么是更好的方法 - 性能方面。

一种方法是调用一个“过滤器”方法,该方法具有多个“if”语句中的所有条件并返回最终过滤结果,然后调用:

observable
    .filter(this::filter)
Run Code Online (Sandbox Code Playgroud)

另一种方法是拥有多个“filterX”方法,每个方法按特定条件过滤,并在链中调用它们:

observable
    .filter(this::filterX)
    .filter(this::filterY)
    .filter(this::filterZ)
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 是否有任何性能差异,两者中哪一个是“更好的做法”?我发现第二个更好,更易读,但目前我遇到了一个带有 ~30 个“if”语句的“过滤器”方法,我想知道我是否应该打扰并将它重构为第二种方法。

java rx-java rx-java2

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

区分函数和扩展

我尝试编写一个可以插入到任何表达式中的函数,以便记录该值:

val x = (2.debug() + 3.debug()).debug("2+3")
Run Code Online (Sandbox Code Playgroud)

但我写了以下无限循环:

fun debug (message: String) {
    Log.d (R.string.app_name.toString(), message) }

fun <T> T.debug (tag: String = "value"): T {
    debug ("$tag: $this")
    return this 
}
Run Code Online (Sandbox Code Playgroud)

我的目标是编写一个“正常”函数(第一个)和一个扩展函数(第二个),扩展函数应该调用正常函数。

我的代码中的问题是:扩展函数调用自身而不是普通函数。我不明白这一点,因为我没有在扩展函数中指定实例接收器。

如何解决这个问题?

kotlin

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

将逻辑AND应用于布尔值列表

考虑一个具有布尔值的可变列表,

MutableList{true, false, false}
Run Code Online (Sandbox Code Playgroud)

使用Kotlin折叠对列表中的所有值进行逻辑与后,如何返回布尔值?

fold kotlin

0
推荐指数
2
解决办法
54
查看次数

如果数组中有数百万个数字,如何找到缺失的数字?

我想得到数百万个数字中第一个缺失的数字。例如,我有一个包含n多个元素的数组。它从 0 开始。在这之间,例如,在 4380 之后,4381 丢失,并以 4382 继续。那么,我怎样才能找到 4381?

我在很多网站上看到过这个问题,包括 SO、Quora 等等。但是,我所能找到的只是一小部分数字。为此,for 循环是最佳选择。但是,当我们的数组中有数百万个数字时,这将无法节省时间和内存。在这种情况下,在考虑时间和内存的情况下可以使用什么来完成它?

注意:元素按升序排列

java arrays algorithm

-3
推荐指数
1
解决办法
453
查看次数