我有一个简单的项目,在 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 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版本仍可以保证调用该方法?
当我尝试通过插页式广告中的关闭按钮关闭广告时,该特定广告即被关闭。但随后又加载了一个广告。应用程序将以这种方式永远持续下去。
如何避免手动关闭另一个广告后再加载?
这是我的代码:
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) 我正在写一个抽象课.扩展此类的类将始终使用常量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在每个子类中提供实现?
先感谢您!
当我尝试将自己的项目迁移到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) 美好的一天!
我是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) 我想过滤 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”语句的“过滤器”方法,我想知道我是否应该打扰并将它重构为第二种方法。
我尝试编写一个可以插入到任何表达式中的函数,以便记录该值:
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)
我的目标是编写一个“正常”函数(第一个)和一个扩展函数(第二个),扩展函数应该调用正常函数。
我的代码中的问题是:扩展函数调用自身而不是普通函数。我不明白这一点,因为我没有在扩展函数中指定实例接收器。
如何解决这个问题?
考虑一个具有布尔值的可变列表,
MutableList{true, false, false}
Run Code Online (Sandbox Code Playgroud)
使用Kotlin折叠对列表中的所有值进行逻辑与后,如何返回布尔值?
我想得到数百万个数字中第一个缺失的数字。例如,我有一个包含n多个元素的数组。它从 0 开始。在这之间,例如,在 4380 之后,4381 丢失,并以 4382 继续。那么,我怎样才能找到 4381?
我在很多网站上看到过这个问题,包括 SO、Quora 等等。但是,我所能找到的只是一小部分数字。为此,for 循环是最佳选择。但是,当我们的数组中有数百万个数字时,这将无法节省时间和内存。在这种情况下,在考虑时间和内存的情况下可以使用什么来完成它?
注意:元素按升序排列