我已经多次在StackOverFlow中发现这个问题了,但我找不到类似于我的问题。所以我不得不问这个问题。
我在viewpager中有一个自定义按钮,当我按下此按钮时,会显示一个对话框。
但它总是崩溃,因为无法添加窗口 - 令牌null不适用于应用程序
任何人都可以帮我解决这个问题,非常感谢!
以下是自定义按钮:
public class RecordButton extends CircleButton {
....
private Dialog recordIndicator;
private void initDialogStartRecord() {
startTime = System.currentTimeMillis();
recordIndicator = new Dialog(context,
R.style.like_toast_dialog_style);
recordIndicator.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
imageView = new ImageView(getContext());
imageView.setImageResource(res[0]);
recordIndicator.setContentView(
imageView,
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
recordIndicator.setOnDismissListener(onDismiss);
WindowManager.LayoutParams lp = recordIndicator.getWindow().getAttributes();
lp.gravity = Gravity.CENTER;
startRecording();
recordIndicator.show();
}
这是viewpager:
public Object instantiateItem(ViewGroup container, int position) {
View viewLayout = inflater.inflate(R.layout.item_photoword,
container, false);
ImageView imageView = (ImageView) viewLayout.findViewById(R.id.iv_photoword);
Bitmap bitmap = ImageUtil.decodeBitmapFromFile(pathList.get(position), AppConstant.SCREEN_WIDTH, 50);
imageView.setImageBitmap(bitmap);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP)
RecordButton button = (RecordButton) viewLayout.findViewById(R.id.bt_record);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "Test", Toast.LENGTH_LONG).show();
}
});
FileUtil.getFileFolder("/Myapp/Record/");
String path = "/Myapp/Record/" + System.currentTimeMillis() + ".amr";
System.out.println("path------>" + path);
button.setSavePath(path);
button.setOnFinishedRecordListener(new RecordButton.OnFinishedRecordListener() {
@Override
public void onFinishedRecord(String audioPath) {
System.out.println("audiopath:---->" + audioPath);
}
});
((ViewPager) container).addView(viewLayout, 0);
return viewLayout;
}
答案 0 :(得分:1)
在创建对话和 ImageView 时,您必须传递活动参考而不是上下文
如果您正在进行活动
,请更改以下行AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
imageView = new ImageView(getContext());
到
AlertDialog.Builder builder = new AlertDialog.Builder(this);
imageView = new ImageView(this);
(OR)
如果您正在进行片段
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
imageView = new ImageView(getActivity());
希望这会对你有所帮助。
答案 1 :(得分:0)
这是context
问题。在这里,
AlertDialog.Builder builder = new AlertDialog.Builder.(getContext());
使用活动上下文。这将解决您的问题,在调用自定义按钮时将context
从您的活动传递到该自定义按钮,然后使用context
创建Dialog
。