// 适配器 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();
}
});
//Activity简要代码
//点击新增领用
@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();
}
是由于有activity时依附于另一个activity的,当被依附的activity产生错误的时候,该activity没有了靠山而产生错误(或者是调用了一个已经被finish()的activity)。一般在创建alertdialog.builder是很容易见到。
对于这个错误还没有根本的解决办法,唯一的办法就是改变该activity依附于另一activity的事实,将其放入另一activity。
Android利用ActivityGroup加载子Activity,子Activity调用对话框,弹出:
ERROR/AndroidRuntime(10104): Caused by: android.view.WindowManager
B
a
d
T
o
k
e
n
E
x
c
e
p
t
i
o
n
:
U
n
a
b
l
e
t
o
a
d
d
w
i
n
d
o
w
−
−
t
o
k
e
n
a
n
d
r
o
i
d
.
a
p
p
.
L
o
c
a
l
A
c
t
i
v
i
t
y
M
a
n
a
g
e
r
BadTokenException: Unable to add window -- token android.app.LocalActivityManager
BadTokenException:Unabletoaddwindow−−tokenandroid.app.LocalActivityManagerLocalActivityRecord@45a58ee0 is not valid; is your activity running?
原因分析:
因为new对话框的时候,参数content 指定成了this,即指向当前子Activity的content。但子Activity是动态创建的,不能保证一直存在。其父Activity的content是稳定存在的,所以有下面的解决办法。
解决办法:
1.将content替换为getParent()即可。
2.还有是把activity类中的 getContext(),换成了 this,Adapter就不依附于另一个activity了,this代表当前这个类中的上下文