Android 'терезе таңбалаушы нөлді қосу мүмкін емес, қосымша үшін' қоспағанда

Диалогты ашуға тырысқанда, келесі Android ерекшелігі аламын. Біреу маған не болып жатқанын түсінуге көмектесе алады және бұл мәселені қалай шеше аламын?

android.view.WindowManager$BadTokenException: 
  Unable to add window -- token null is not for an application
    at android.view.ViewRoot.setView(ViewRoot.java:509)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
    at android.app.Dialog.show(Dialog.java:241)
129
Кодты жарияламай-ақ қалай білуге ​​болады?
қосылды автор Falmarri, көзі
Қызметті пайдаланатын болсаңыз, «stackoverflow.com/questions/23516689/…
қосылды автор CoolMind, көзі
Бұл сұраққа жауап беріңіз, осы жауаптың сілтемесін жариялаудың ең бастысы осы мәселе бойынша түсініктемеде жақсы сұхбат бар, ол неге бұл мәселенің пайда болуын және онымен күресудің ең жақсы тәсілі болып табылады http://stackoverflow.com/a/7229248/501483
қосылды автор dhams, көзі

9 жауаптар

Менің болжауымша, диалогты қосымшаның контекстімен жасауға тырысасыз ба? Сол сияқты бірнәрсе:

new Dialog(getApplicationContext());

Бұл дұрыс емес. Әрекет мәтінмәнін пайдалануыңыз керек.

Сіз сияқты әрекет етуіңіз керек:

new Dialog(YourActivity.this);
407
қосылды
Рахмет. Бірақ жаңа Dialog (getApplicationContext ()) қолданбадым; Мен тек жаңа AlertDialog.Builder (mContext); ' онда mContext - әрекетке арналған референт.
қосылды автор michael, көзі
YourActivity.this жолымен әрқашан әр диалогты жасаңыз
қосылды автор Pratik Butani, көзі
getActivity() @SagarDevanga пайдаланыңыз
қосылды автор Pratik Butani, көзі
developer.android.com/guide/topics/ui/dialogs.html Біраз уақыттан бері тіркелген. Мұны тек қана сілтеме жасау керек. Үлгі де жақсарды. :)
қосылды автор Martin Marconcini, көзі
Android құжаттары ( developer.android.com/guide/topics/ui/ dialog.html # CustomDi & zwnj; alog ) диалогтық терезесін жасау үшін осы қате бар. Контекст mContext = getApplicationContext (); Dialog диалогы = жаңа диалог (mContext); Сіздің түзетуіңіз Dialog тілқатысу терезесіне әкеледі = жаңа Dialog (бұл); Қандай жұмыс істейді! Рахмет
қосылды автор bnieland, көзі
Содан кейін mContext MyActivity.this болуы керек.
қосылды автор Luis, көзі
Рахмет @ ツ FellinLovewithAndroid ツ, ол жұмыс істеді, бірақ мен түсінбеймін, неге біз контекстке
қосылды автор Sagar Devanga, көзі
@ ツ FellinLovewithAndroid ツ фрагменттен диалогты алғым келсе, не істеу керек
қосылды автор Sagar Devanga, көзі
@SagarDevanga, себебі қызмет - бұл да контекст. Бұл контекстің қосалқы сыныбы.
қосылды автор gbenroscience, көзі

getApplicationContext() пайдалануды жалғастыра бересіз, бірақ қолданар алдында осы жалаушаны қосуыңыз керек: dialog.getWindow (). SetType (WindowManager.LayoutParams.TYPE_SYSTEM_ALERT) қате көрсетілмейді.

Рұқсатыңызды ұмытпаңыз:


32
қосылды
Сіз жалаушаны қалай қосасыз?
қосылды автор Conner Dassen, көзі
RecyclerAdapter ішіне getActivity() пайдалану мүмкін емес
қосылды автор Martin Erlic, көзі
getActivity() функциясын пайдаланыңыз
қосылды автор portfoliobuilder, көзі
Ия, бұл өте оңай. Рұқсатыңызды ұмытпаңыз, мен қазір редакцияланған.
қосылды автор codezjx, көзі
Бұл керемет :)
қосылды автор Syed Hamza Hassan, көзі
Мен бұл үшін 2 сағат өткіздім, сіз менің уақытымды сақтадыңыз ... Массасы ....
қосылды автор Vji, көзі

new AlertDialog.Builder (getParent ()) сияқты context дәлелінің орнына getParent() деп көріңіз; мені.

11
қосылды
Рахмет @PriyankJoshi, сіз менің күнімді құтқардыңыз, сондай-ақ, «Android қосуға болмайтын терезе жарамсыз, сіздің қызметіңіз іске қосылды ма?» Деген ерекше бір ерекшелікті шешеді.
қосылды автор Eslam Yousef Mohammed, көзі
GetParent() функциясын қалай пайдалана аламын?
қосылды автор vinidog, көзі
GetParent() дегенді неге қолдану керек, бұл нені білдіреді?
қосылды автор José Castro, көзі
Әрекет сыныпын ұзартпайтын басқа класстағы кез келген тілқатысу терезесін көрсеткенде, сіз белсенділікті кеңейтетін сол сыныптың контекстін ала алмайсыз. Мәселен, диалогты көрсетуге тырысатын, бірақ қызметті ұзартпайтын сыныптағы мәтінмәнді алу үшін сіз осы жоғары белсенділіктің мәтінін қайтаратын getParent() функциясын пайдалана аласыз.
қосылды автор Priyank Joshi, көзі

Менің жағдайымда мына диалогты жасауға тырыстық:

new Dialog(getApplicationContext());

Сондықтан мен өзгеруім керек еді:

new Dialog(this);

Бұл мен үшін жақсы жұмыс істейді;)

11
қосылды
Сіздің жауабыңыз дұрыс, бірақ ол тек қызмет ауқымында жұмыс істейтін болады. Егер сіз ішкі ауқымда болсаңыз, this орнына this орнына MyActivity.class қолданыңыз.
қосылды автор Shahar, көзі
Сондай-ақ, this сіздің Dialog сіздің тақырыпты иеленетініне көз жеткізеді.
қосылды автор TheRealChx101, көзі

Менің болжауымша - сіз диалогты пайдаланып жатырсыз.

 getApplicationContext()
 mContext which is passed by activity.

Егер сіз диалогтың емес белсенділік классын көрсеңіз, онда сіз белсенділікті параметр ретінде беруіңіз керек.

Activity activity=YourActivity.this;

Енді бұл тамаша жұмыс.

Егер сіз кез-келген қиындықты тапсаңыз, онда маған хабарлаңыз.

3
қосылды

Мен мұны контекстік салада сынап көрдім:

this.getActivity().getParent()

және ол мен үшін жақсы жұмыс істейді. Бұл «Fragment» -дан шығатын сыныптан болды:

public class filtro extends Fragment{...
2
қосылды

Бұл мен үшін жұмыс істемеген мәтін мен мәтінмәнді пайдаланыңыз ... бірақ MyActivityName.this жұмыс істеді. Бұл қажет кез келген адамға көмектеседі деп үміттенемін.

0
қосылды

Мен бірдей ерекшелікке ие болдым. бұл түзету үшін не істеу диалогтың данасын өту болып табылады функцияға параметр ретінде және оны тек контекстен өткізіп, содан кейін getContext() арқылы қолданыңыз. бұл шешім менің проблемамды шешеді, ол көмектесе алады деп үміттенемін

0
қосылды

Мен осы жағдайды алып тастадым, Cordova Plugin бағдарламасы бойынша «Прогресс диалогын» ашуға тырыстым,

  1. Жаңа ProgressDialog (this.cordova.getActivity (). getParent ());

  2. Жаңа ProgressDialog (бұл.cordova.getActivity ()) getApplicationContext ());

Кейінірек бұл өзгерді,

жаңа ProgressDialog (this.cordova.getActivity ());

Мен үшін ол жұмыс істейді.

0
қосылды