如何解决这个问题:无法添加窗口 - 令牌null不适用于应用程序

时间:2015-02-23 03:57:31

标签: android android-viewpager android-custom-view android-dialog

我已经多次在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;
}

2 个答案:

答案 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问题。在这里,

中的' getContext()`是什么
AlertDialog.Builder builder = new AlertDialog.Builder.(getContext());

使用活动上下文。这将解决您的问题,在调用自定义按钮时将context从您的活动传递到该自定义按钮,然后使用context创建Dialog