Ich habe ein PopUpWindow, das angezeigt werden muss, nach ein paar Sekunden, wenn der Benutzer noch auf der aktuellen Aktivität ist. Ich implementierte stament, die überprüfen, ob die Aktivität nicht beendet/zerstört und dann das Popup angezeigt wird, und es funktioniert gut für Wochenendbenutzer :) (langsames Klicken von Aktivität zu Aktivität), aber in hohen Drucktests (Aktivitäten sind neu erstellen, fertig, schnelle Bewegung Aktivität zu Aktivität), die mir diesen Fehler gibt:BadTokenException: Fenster konnte nicht hinzugefügt werden - Token-Null ist nicht gültig; läuft deine Aktivität? in activity.isFinishing Statement
E/UncaughtException: android.view.WindowManager $ BadTokenException: Unable Fenster hinzuzufügen - Token null ist nicht gültig; Ist Ihre Aktivität läuft? bei android.view.ViewRootImpl.setView (ViewRootImpl.java:598) bei android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:341) bei android.view.WindowManagerImpl.addView (WindowManagerImpl.java:85) bei android.widget.PopupWindow.invokePopup (PopupWindow.java:1279) bei android.widget.PopupWindow.showAtLocation (PopupWindow.java:1040) bei android.widget.PopupWindow.showAtLocation (PopupWindow.java:1003) bei com .guides4art.app.ImageSlider.RatePopUp $ 3.run (RatePopUp.java:86) bei android.os.Handler.handleCallback (Handler.java:743) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:150) bei android.app.ActivityThread.main (ActivityThread.java:5546) bei java .lang.reflect.Method.invoke (Native Methode) um com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:794) bei com.android.internal.os.ZygoteInit.main (ZygoteInit .java: 684)
Code:
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() || !context.isDestroyed())
activityView.post(new Runnable() {
@Override
public void run() {
popupWindow.showAtLocation(context.getWindow().getDecorView(), Gravity.CENTER,0,0);
}
});
}
//View Pager Class
@Override
public void onPageSelected(int position) {
if(viewPager !=null){
this.position=position;
if(position==carList.size()-1 && isRated() && showRateBar)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
new RatePopUp(Cars.this,activityView);
showRateBar=false;
}
},5*SECOND);
//RatePopUp constructor
public RatePopUp(Activity context,View activityView){
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.rate_popup_layout, null);
this.activityView=activityView;
ratingBar = (RatingBar) view.findViewById(R.id.ratingPop);
title= (TextView)view.findViewById(R.id.rateTitle);
title.setText(context.getString(R.string.rate_exhibition));
closeButton = (Button)view.findViewById(R.id.close_button);
Typeface typeface =Typeface.createFromAsset(context.getAssets(),"fonts/fontawesome-webfont.ttf");
closeButton.setTypeface(typeface);
closeButton.setText(context.getString(R.string.exitIcon));
showPopUpWindow(context);
}
wie rufen Sie 'showPopUpWindow' – rafsanahmad007
Ich füge den Rest des Codes – Expiredmind