android - 如何在android中的另一个弹出窗口中显示弹出窗口

标签 android popupwindow

我想在另一个弹出窗口中显示弹出窗口而不关闭第一个弹出窗口。它看起来像这样

enter image description here

我的主类如下

 @Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    location = CommonMethod.locateView(v);
    showMyPresentationPopup(mContext, location);
}

private void showMyPresentationPopup(final Context context, Rect loaction) {
    int popupWidth = convertDipToPixels(400);
    int popupHeight = convertDipToPixels(500);
    String statictext;
    List<String> mResults = new ArrayList<String>();
    for(int i=0;i<15;i++)
    {
        statictext = "Presentatation "+i+" Name Here";
        mResults.add(statictext);
    }
    PresentationListAdapter mAdapter = new PresentationListAdapter(DashboardActivity.this, mResults);

    LayoutInflater layoutInflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     final  View layout = layoutInflater.inflate(R.layout.presentation, null);


    ListView mListView =(ListView)layout.findViewById(R.id.presentationlistid); 
    mListView.setAdapter(mAdapter);
    mListView.setItemsCanFocus(false);
    mListView.setFocusableInTouchMode(false);

    displayPopUp(layout,popupWidth, popupHeight,myPresentation,location);
}
// Creating the PopupWindow
public void displayPopUp(View layout,int popupWidth,int popupHeight,View v, Rect location){
mPresentationList = new PopupWindow(mContext);
mPresentationList.setFocusable(true);
mPresentationList.setContentView(layout);
mPresentationList.setWidth(popupWidth);
mPresentationList.setHeight(popupHeight);
mPresentationList.setTouchable(true);
mPresentationList.setBackgroundDrawable(new BitmapDrawable());
mPresentationList.setOutsideTouchable(true);

 mPresentationList.setTouchInterceptor(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
            mPresentationList.dismiss();
            return true;
        }
        return false;
    }

});
mPresentationList.showAsDropDown(v, -convertDipToPixels(20), 0);

我正在尝试打开另一个弹出窗口的 getview 方法

@Override
public View getView(int pos,  View convertview, final ViewGroup arg2) {
    // TODO Auto-generated method stub
    final Viewholder holder;

    if(convertview==null){  
    LayoutInflater layoutInflater =(LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    convertview=layoutInflater.inflate(R.layout.presentationitem, null,false);
    holder=new Viewholder();

    holder.Title=(TextView)convertview.findViewById(R.id.presentationtitle);
    holder.mRefresh=(Button)convertview.findViewById(R.id.refreshid);
    holder.mDelete=(Button)convertview.findViewById(R.id.deleteid);
    holder.mDelete.setFocusable(false);
    holder.mRefresh.setFocusable(false);
    holder.mDelete.setFocusableInTouchMode(false);
    holder.mRefresh.setFocusableInTouchMode(false);


    convertview.setTag(holder);
    }
    else{
        holder=(Viewholder)convertview.getTag();
    }
        Log.e("adapter5453===>",wifilist.get(pos));
        holder.Title.setText(wifilist.get(pos));
        holder.mRefresh.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int popupWidth = 250;
                int popupHeight = 100;

                LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View layout = layoutInflater.inflate(R.layout.sync_dialog, null);
                displayRefreshPopUp(layout,popupWidth, popupHeight,v,location);
            }
        });

        convertview.setTag(R.string.close, wifilist.get(pos));
    return convertview;
}

static class Viewholder{

    TextView Title;
    Button mRefresh;
    Button mDelete;


}

public void displayRefreshPopUp(View layout,int popupWidth,int popupHeight,View v, Rect location){
    mRefreshPopUp = new PopupWindow(context);
    mRefreshPopUp.setContentView(layout);
    mRefreshPopUp.setWidth(popupWidth);
    mRefreshPopUp.setHeight(popupHeight);
    mRefreshPopUp.setTouchable(true);
    mRefreshPopUp.setFocusable(true);
    mRefreshPopUp.setBackgroundDrawable(new BitmapDrawable());
    mRefreshPopUp.setOutsideTouchable(true);
    mRefreshPopUp.setTouchInterceptor(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
            mRefreshPopUp.dismiss();
            return true;
        }
        return false;
    }
});
    mRefreshPopUp.showAsDropDown(v, -20, 0);
    //mRefreshPopUp.showAtLocation(v, Gravity.TOP, 0, 0);

}

我遇到以下错误。

android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@4194d750 is not valid; is your activity running? 

提前致谢

最佳答案

如果不做窗口怎么办。让它成为行本身的隐藏元素。显示/隐藏它,由于简单的子顺序,它会叠加在它之前的行上。这使您可以完全控制它的外观,还可以让您避免与花哨的弹出窗口作斗争。

关于android - 如何在android中的另一个弹出窗口中显示弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19427375/

相关文章:

android - 添加 Scrollview 会将整个布局推到一半 View 大小?

android - Session.isOpened() == true 但 Session.getAccessToken() == ""

html - 如何在弹出窗口上添加 anchor 链接以在同一弹出窗口内的部分之间跳转

Android 弹出窗口使应用程序崩溃

java - 样式 ="?android:attr/"和样式 ="@android:attr"有什么不同

android - 如何在 Android 中使用 Google Places Api Actions 存储邻近区域和地址?

java - Android 上支持多种分辨率的问题

android - 点击外部或后退按钮后关闭 PopupWindow

java - 安卓|从另一个(非 Activity )类启动 PopupWindow

Android Webview 模拟器与 PopupWindow 中的设备