有时,我想自己处理用户按下的后退按钮。我的(示例)代码如下所示:
class TestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.test)
}
override fun onBackPressed() {
if (checkSomeCondition()) {
// do nothing
} else {
super.onBackPressed()
}
}
private fun checkSomeCondition() = false
}
Run Code Online (Sandbox Code Playgroud)
当按下返回时我会收到通知,然后我决定是否要处理它,或者让系统通过调用 来处理它super.onBackPressed()。
由于 onBackPressed() 现已弃用,我使用以下方法替换它OnBackPressedDispatcher:
class TestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.test)
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (checkSomeCondition()) {
// do nothing
} else {
onBackPressedDispatcher.onBackPressed()
}
} …Run Code Online (Sandbox Code Playgroud) 我想当你快速尝试30分钟时,每个人都能体验到他的app工作.但是当一个应用程序在设备的背景中停留一天左右时,你得到了你的NullPointerExceptions东西并且事情没有按预期工作,因为Garbage Collector偷了你的东西.有没有办法模拟在后台运行很长时间的应用程序?
在编辑XML布局文件时,Eclipse有一个名为"wrap in container"的功能(Reformat - > Android - > ...),它允许您选择一个或多个Views并围绕它选择一个布局.Android Studio中有类似的东西吗?
我有三个Observables,我和combineLastest合并:
Observable<String> o1 = Observable.just("1");
Observable<String> o2 = Observable.just("2");
Observable<String> o3 = Observable.just("3");
Observable.combineLatest(o1, o2, o3, new Func3<String, String, String, Object>() {
@Override
public Object call(String s, String s2, String s3) {
return null;
}
});
Run Code Online (Sandbox Code Playgroud)
我想通知其中一个Observable的第一次发射而不忽略后面的发射,我想第一个操作员会这样做.是否有一个方便的操作员(例如):
o1.doOnFirst(new Func1<String, Void>() {
@Override
public Void call(String s) {
return null;
}
})
Run Code Online (Sandbox Code Playgroud) 我想对使用Jetpack Compose 的Activity 进行 UI 测试。该文档提供了有关如何使用两种变体测试此类屏幕的一些信息:
@get:Rule val composeTestRule = createComposeRule()
Run Code Online (Sandbox Code Playgroud)
如果我不需要活动本身运行并且只想测试我的可组合项或
@get:Rule val composeTestRule = createAndroidComposeRule<MyActivity>()
Run Code Online (Sandbox Code Playgroud)
如果我确实需要这项活动。
在第二种情况下,我如何将带有 Extras 的 Intent 传递给活动?
我试过了:
@Before
fun setUp() {
composeTestRule.activity.intent = Intent().apply {
putExtra(
"someKey",
123
)
}
}
Run Code Online (Sandbox Code Playgroud)
但活动中的意图额外内容仍然为空。
我在ViewPager中有一个水平的ScrollView.为了防止在到达ScrollView结束时滚动ViewPager,我按照SO上的提示使用此类:
public class CustomScrollView extends HorizontalScrollView {
public CustomScrollView(Context p_context, AttributeSet p_attrs) {
super(p_context, p_attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent p_event) {
return true;
}
@Override
public boolean onTouchEvent(MotionEvent p_event) {
if (p_event.getAction() == MotionEvent.ACTION_MOVE
&& getParent() != null) {
getParent().requestDisallowInterceptTouchEvent(true);
}
return super.onTouchEvent(p_event);
}
}
Run Code Online (Sandbox Code Playgroud)
在onInterCeptTouchEvent似乎消耗任何点击该View和里面的一切.当我把Views成ScrollView,他们的OnClickListener旨意不会被调用.
当我让onInterceptTouchEventfalse返回false时,OnClickListener调用s,但ScrollView不能滚动.
如何在其中放置可点击的视图ScrollView?
编辑:在实施Rotem的答案后,onClickListener工作,但它不仅触发点击事件,也触发其他人,如投掷.如何防止这种情况?
import android.support.annotation.NonNull;
public
@NonNull
Result handleFollowForwardResult(@NonNull Result tempResult, @NonNull Result oldResult) {
return null;
}
Run Code Online (Sandbox Code Playgroud)
不会给出任何错误或警告?注释的重点不是要检查这个吗?
我正在尝试使用Android Studio的新单元测试功能.我按照http://tools.android.com/tech-docs/unit-testing-support上的说明进行操作.那里的描述明确提到'方法...没有嘲笑'错误,并建议将以下内容放入build.gradle:
android {
// ...
testOptions {
unitTests.returnDefaultValues = true
}
}
Run Code Online (Sandbox Code Playgroud)
这可以在从命令行启动时运行测试
gradlew test --continue
Run Code Online (Sandbox Code Playgroud)
但是当我使用rightclick - > run从Android Studio运行测试类时.这样,我又得到了同样的错误:
java.lang.RuntimeException: Method setUp in android.test.AndroidTestCase not mocked. See https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support for details.
at android.test.AndroidTestCase.setUp(AndroidTestCase.java)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何想法?
编辑:测试类的内容并不重要,因为测试的setUp失败,我尝试了最简单的类:
public class ContactFormToolTest extends AndroidTestCase {
public void testSOmething(){
assertEquals(false, true);
}
}
Run Code Online (Sandbox Code Playgroud)
也尝试重写setUp,没有任何区别.
我有一个GcmListenerService侦听GCM消息,然后创建一个通知:
public class MyGcmListenerService extends GcmListenerService {
NotificationManager notificationManager;
@Override
public void onMessageReceived(final String from, final Bundle data) {
super.onMessageReceived(from, data);
notificationManager = (NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE);
String title = data.getString("title");
String messager = data.getString("message");
Notification notification = new NotificationCompat.Builder(getApplicationContext())
// set title, message, style etc
.build();
notificationManager.notify(0, notification);
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很标准.这对于成千上万的用户而言每天工作数千次.我确实通过Crashlytics收到了上述几行的以下崩溃:
致命异常:java.lang.RuntimeException无法在未调用Looper.prepare()的线程内创建处理程序
这种情况几乎完全发生在Android 6(98%)和制造商称为TCLCommunications的设备上.
任何人都已经经历过这样的事情,或者知道这是关于什么的?
从后台线程创建通知应该是完全可以的,对吧?
图为我的应用程序的一部分,AutoCompleteTextView附带适配器.当用户在该视图中输入内容时,会显示自动填充建议.
我遇到的问题是:当显示建议并按下设备的向下箭头时,只有AutoCompleteTextView关闭的建议被关闭,键盘保持打开状态,需要再次点击向下箭头才能消失.
我确实希望第一次点击向下箭头时建议和键盘消失.
我尝试覆盖onBackPressed但是当向下箭头被敲击时它没有被调用,大概是因为它不被认为是"后退".
我怎么能这样做?
编辑:我知道如何以编程方式隐藏键盘,我想我的问题是检测'向下箭头'点击.
