Androidは、エラートークンnullが無効であると報告します。アクティビティはアダプタのポップアップウィンドウで実行されています

// Adapterクラスの簡単なコード

 Context mContext;//获取环境上下文
//设置领用日期
        holder.tvDate.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    

                Toast.makeText(mContext.getApplicationContext(), "预约时间无效,请重新确认", Toast.LENGTH_SHORT).show();
                    new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() {
    
    
                        @Override
                        public void onDateSet(DatePicker view, int years, int months, int days) {
    
    

                            String strMonth = month < 10 ? "0" + month :"" + month;
                            String strDay = day < 10 ? "0" + day : "" + day;
                            String theDate = String.format(year + "-" + strMonth + "-" + strDay);
                            holder.tvDate.setText(theDate);
                            Toast.makeText(mContext, "选择时间", Toast.LENGTH_SHORT).show();
                        }
                    }, 2020, 7, 15).show();

                }
        });

//アクティビティの簡単なコード

    //点击新增领用
    @OnClick(R.id.btn_addCollection_collectionSonPage)
    void addCollectionDataView() {
    
    
        mEntryList.add(new CollectSonGoodsAddEntry());
        Toast.makeText(getBaseContext(), "新增领用", Toast.LENGTH_SHORT).show();
       
  //错误 ,getContext()依附了适配器的Context/  mCollectionSonAdapter = new CollectionSonAdapter(getContext(), mEntryList);
//修正  
  mCollectionSonAdapter = new CollectionSonAdapter(this, mEntryList)
        mRecyCollectionData.setAdapter(mCollectionSonAdapter);

        mCollectionSonAdapter.notifyDataSetChanged();
    }

別のアクティビティにアタッチされているアクティビティがあるためです。アタッチされたアクティビティでエラーが発生した場合、そのアクティビティにはバッキングがなく、エラーが発生します(またはfinished()されたアクティビティが呼び出されます)。一般に、alertdialog.builderを作成するときに簡単に確認できます。

このエラーに対する根本的な解決策はありません。唯一の方法は、アクティビティが別のアクティビティにアタッチされているという事実を変更し、それを別のアクティビティに配置することです。

Android利用ActivityGroup加取子Activity、子Activity调用対话框、弹出:
ERROR / AndroidRuntime(10104):原因:android.view.WindowManager B ad T oken E xception:U nabletoaddwindow − −tokenandroid。アプリ。ローカルアクティビティマネージャーBadTokenException:ウィンドウを追加できません-token android.app.LocalActivityManagerB a d T o k e n E x c e p t i o nU n a b l e t o a d d w i n d o w- T O K E N N個のDのR O I D pのp L o c a l A c t i v i t y M a n a g e r LocalActivityRecord @ 45a58ee0は無効です。あなたの活動は実行されていますか?

原因分析:

新しいダイアログボックスでは、パラメータの内容がthisとして指定されているため、現在の子アクティビティの内容を指します。ただし、子アクティビティは動的に作成され、常に存在するという保証はありません。親アクティビティのコンテンツは安定しているため、次の解決策があります。

解決:

1.コンテンツをgetParent()に置き換えます。
2.アクティビティクラスにgetContext()もあり、これに置き換えられます。アダプタは別のアクティビティにアタッチされていません。これは、現在のクラスのコンテキストを表します。

おすすめ

転載: blog.csdn.net/ShiXinXin_Harbour/article/details/108639330