Android“正在运行吗?” PopupWindow上的BadTokenException

时间:2014-03-09 04:31:25

标签: java android exception-handling android-context

我当前的项目要求使用嵌套的 Spinner 显示 PopupWindow 但由于某种原因,应用此代码:(此代码实际上是实例化LinearLayout,创建一个Spinner使用我的数组中定义的元素 spinnersRay ,并将其全部放在PopupWindow上)

    //LINEAR LAYOUT
    editsChangeLinear = new LinearLayout(this);
    editsChangeLinear.setLayoutParams(parentMatches);
    editsChangeLinear.setOrientation(LinearLayout.VERTICAL);
    editsChangeLinear.setBackgroundColor(Color.LTGRAY);


            //ARRAYLIST & ADAPTER
    ArrayList<String> arrayList = new ArrayList<String>();
    for(SpinnerIndex i : spinnersRay){
        if(!i.name.replaceAll("\\s","").equals("TUTORIALS"))
        arrayList.add(i.name);
    }
    spinner = new Spinner(this);
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,
             android.R.layout.simple_spinner_dropdown_item,arrayList);
    spinner.setAdapter(spinnerArrayAdapter);


            //ADD VIEW 
    editsChangeLinear.addView(spinner);


    editsChangePopup = new PopupWindow(editsChangeLinear, 
            LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);


editsChangePopup.setFocusable(true);
    editsChangePopup.setContentView(editsChangeLinear);
            editsChangePopup.showAtLocation(outerScrollView,1,0,0);

每当我点击Spinner时,我总是会得到相同的BadTokenException,其中clear显示从我的 i.name 调用返回的字符串,它只访问我自己的自定义Spinner类的名称元素SpinnerIndex扩展Spinner。 Spinner(或者至少它的第一个元素)看起来是正确形成的,但每当我点击它时都会抛出此异常。我不明白为什么。

我尝试将内容放在单独的主题中或者用上下文进行操作但我在这里很丢失。

1 个答案:

答案 0 :(得分:0)

尝试使用,可能会对你有所帮助

runOnUiThread(new Runnable() {
            @Override
            public void run() {
                editsChangePopup = new PopupWindow(editsChangeLinear, 
                        LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);


                editsChangePopup.setFocusable(true);
                    editsChangePopup.setContentView(editsChangeLinear);
                            editsChangePopup.showAtLocation(outerScrollView,1,0,0);/ TODO Auto-generated method stub

            }
        });