我有一个popUpWindow需要通过显示,几秒后,如果用户仍在当前活动.我实现了检查活动是否未完成/销毁然后显示弹出窗口,并且它适用于周末用户:)(从活动到活动慢慢点击)但在高压测试中(活动正在重新创建,完成,快速移动形式)活动到活动)给我的错误:
E/UncaughtException:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null无效; 你的活动在运行吗?在android.view.WindowManager上运行android.view.WindowManager全局调查(WindowManagerGlobal.java:341)的android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)上的android.view.ViewRootImpl.setView(ViewRootImpl.java:598). PopupWindow.invokePopup(PopupWindow.java:1279)位于android.widget.PopupWindow.showAtLocation(PopupWindow.java:1040)的android.widget.PopupWindow.showAtLocation(PopupWindow.java:1003)com.guides4art.app.ImageSlider.RatePopUp $ 3.run(RatePopUp.java:86)在android.os.Handler.handleCallback(Handler.java:743)android.os.Handler.dispatchMessage(Handler.java:95)android.os.Looper.loop(Looper) .java:150)在android.app.ActivityThread.main(ActivityThread.java:5546)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit) .java:794)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
码:
private void showPopUpWindow(final Activity context){
popupWindow = new PopupWindow(context);
LinearLayout.LayoutParams layoutParams =new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
popupWindow.setHeight(layoutParams.height);
popupWindow.setWidth(layoutParams.width);
popupWindow.setOutsideTouchable(true);
popupWindow.setTouchable(true);
popupWindow.setFocusable(true);
popupWindow.setContentView(view);
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
if(context instanceof CarSale) {
((CarSale) context).saveRate((int) rating);
((CarSale) context).initRate();
title.setText(""+context.getString(R.string.thanksForRate));
}
else
Log.i("kamil","error");
}
});
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupWindow.dismiss();
}
});
if(!context.isFinishing() …Run Code Online (Sandbox Code Playgroud) 我使用 Android Paging 库为我的列表实现了无限滚动。我根据页面从 API 中下载数据。我的应用程序允许用户通过在 API 查询中添加一些参数来过滤项目。启用过滤后,我喜欢将parameters字段更改为PageKeyedDataSource实例并重置加载程序(我想将页面设置为 1 并在其中调用 loadInitial 方法)
DataSource(private var initialData: List<Data>, var parameters: HashMap<String, String>) : PageKeyedDataSource<Int, Data>() {
override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, Data>) {
callback.onResult(initialData, null, 2)
}
override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, Data>) {
val page = params.key
parameters[PAGE] = page.toString()
val request = ApiRequest()
request.setOnDataObtainListener {
callback.onResult(it,page.inc())
}
request.getData(parameters)
}
override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Int, Data>) {
}
fun reset(initialData: List<Data>, parameters: HashMap<String, String>) …Run Code Online (Sandbox Code Playgroud) 我想制作基于 RecyclerView 的列表,用户可以无限滚动。上面只有几个项目,但是每当用户滚动到末尾时,列表的第一个项目就会出现等等。此功能可以在两个滚动方向上工作。