2014-01-09 3 views
1

У меня есть всплывающее окно, которое имеет список. Каждый элемент списка содержит одно изображение delete.Now, мне нужно открыть popwindow чуть выше изображения для удаления, когда пользователь нажимает на изображение .so, в основном это будет как popupwindow indside всплывающего window.When Я пытаюсь сделать так, я получаю следующее сообщение об ошибке: -Как показать popupwindow в элементе списка popupwindow

01-09 10:36:56.860: E/AndroidRuntime(8881): android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.view.ViewRootImpl.setView(ViewRootImpl.java:705) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:355) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:234) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:153) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.view.Window$LocalWindowManager.addView(Window.java:559) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.widget.PopupWindow.invokePopup(PopupWindow.java:1013) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.widget.PopupWindow.showAtLocation(PopupWindow.java:856) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.widget.PopupWindow.showAtLocation(PopupWindow.java:820) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at com.sdei.presentationapp.util.PresentationListAdapter.displayRefreshPopUp(PresentationListA dapter.java:211) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at com.sdei.presentationapp.util.PresentationListAdapter$1.onClick(PresentationListAdapter.java:117) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.view.View.performClick(View.java:4232) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.view.View$PerformClick.run(View.java:17318) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.os.Handler.handleCallback(Handler.java:615) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.os.Looper.loop(Looper.java:137) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at android.app.ActivityThread.main(ActivityThread.java:4921) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
01-09 10:36:56.860: E/AndroidRuntime(8881):  at dalvik.system.NativeStart.main(Native Method) 

Я пытаюсь сделать за последние 3 days.Please помочь мне.

Мой код

private void showMyPresentationPopup(final Context context, Rect loaction,final ArrayList<SelectedPresentationdata> mSelectedPresentation) { 
    int popupWidth = convertDipToPixels(400); 
    int popupHeight = convertDipToPixels(500); 
    LayoutInflater layoutInflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final View layout = layoutInflater.inflate(R.layout.presentation, null); 
    displayPopUp(layout,popupWidth, popupHeight,myPresentation,location); 
    PresentationListAdapter mAdapter = new PresentationListAdapter(DashboardActivity.this,mSelectedPresentation,mPosition,mPresentationList); 
    ListView mListView =(ListView)layout.findViewById(R.id.presentationlistid); 
    mListView.setAdapter(mAdapter); 
    mListView.setItemsCanFocus(false); 
    mListView.setFocusableInTouchMode(false); 

    mListView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
       long arg3) { 
      // TODO Auto-generated method stub 
      Log.w("mSelectedPresentationList.get(position).get_dataSync()",mSelectedPresentationList.get(position).get_dataSync()); 
      if(mSelectedPresentationList.get(position).get_dataSync().equalsIgnoreCase("1")){ 
      PreferenceConnector.writeInteger(getApplicationContext(), PreferenceConnector.SELECTED_POSITION, position); 
      Log.i("value to be write in preferences isssssss",position+">>>>>>>>>"); 
      PreferenceConnector.writeString(getApplicationContext(), PreferenceConnector.SELECTED_PRESSO_ID, mSelectedPresentationList.get(position).get_pId()); 
      PreferenceConnector.writeString(getApplicationContext(), PreferenceConnector.PRESENTATION_NAME, mSelectedPresentationList.get(position).get_pName()); 
      PreferenceConnector.writeString(getApplicationContext(), PreferenceConnector.SELECTED_PRESSO_MODE, mSelectedPresentationList.get(position).get_pMode()); 
      mPresentationName.setText(mSelectedPresentationList.get(position).get_pName()); 
      String present_id=mSelectedPresentation.get(position).get_pId(); 
      getSlideInfo(present_id); 
      mPresentationList.dismiss(); 
      } 

     } 
      }); 


} 
// 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); 
mCancel=(Button)layout.findViewById(R.id.cancel); 
mCancel.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     mPresentationList.dismiss(); 
    } 
}); 

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); 
} 

Мой класс Адаптер для popupwindoe ListItem: -

public class PresentationListAdapter extends BaseAdapter implements BgTaskListener<String>{ 

Context context; 
ArrayList<SelectedPresentationdata> mSelectedPresentation; 
private Rect location; 
CommonMethod mCommonMethod; 
private PopupWindow mRefreshPopUp; 
ArrayList<String> mPresentationIdList; 
private String mPosition; 
private String syncStaus; 
private String mUserId; 
private PopupWindow mPopUpList; 
private String mSelectedPressoId; 

public PresentationListAdapter(Context context,ArrayList<SelectedPresentationdata> mSelectedPresentation,String mPosition,PopupWindow mWindow) { 
    // TODO Auto-generated constructor stub 
    this.context=context; 
    this.mSelectedPresentation=mSelectedPresentation; 
    this.mPosition=mPosition; 

    Log.d("vie wissssss",mPopUpList+">>>>>>>"); 
    this.mPopUpList=mWindow; 
    mCommonMethod=new CommonMethod(context); 
    mUserId=PreferenceConnector.readString(context, PreferenceConnector.USER_ID, ""); 

} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return mSelectedPresentation.size(); 
} 

@Override 
public Object getItem(int arg0) { 
    // TODO Auto-generated method stub 
    return mSelectedPresentation.get(arg0); 
} 

@Override 
public long getItemId(int arg0) { 
    // TODO Auto-generated method stub 
    return arg0; 
} 

@Override 
public View getView(final 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.mLayout=(LinearLayout)convertview.findViewById(R.id.parentLayout); 
    holder.mRefresh=(Button)convertview.findViewById(R.id.refreshid); 
    holder.mDelete=(Button)convertview.findViewById(R.id.deleteid); 
    holder.mTickView=(ImageView)convertview.findViewById(R.id.iv_icon); 
    holder.mDelete.setFocusable(false); 
    holder.mRefresh.setFocusable(false); 
    holder.mDelete.setFocusableInTouchMode(false); 
    holder.mRefresh.setFocusableInTouchMode(false); 
    convertview.setTag(holder); 
    } 
    else{ 
     holder=(Viewholder)convertview.getTag(); 
    } 
     mSelectedPressoId=mSelectedPresentation.get(pos).get_pId(); 
     holder.Title.setText(mSelectedPresentation.get(pos).get_pName()); 
     syncStaus=mSelectedPresentation.get(pos).get_dataSync(); 
     Log.i("syncing tag value issssssssss",mSelectedPresentation.get(pos).get_dataSync()+">>>>>>>>>>>>>>>>>."); 
     Log.e("position isssssss",mPosition+">>>>>>>>>"+pos); 

     holder.mDelete.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       LayoutInflater layoutInflater = (LayoutInflater) context 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       final View layout = layoutInflater.inflate(R.layout.delete_dialog, null); 

       displayRefreshPopUp(layout, 200, 200, v, location); 
      } 
     }); 


     if(syncStaus.equalsIgnoreCase("0")){ 
     holder.mRefresh.setVisibility(View.VISIBLE); 
     holder.mRefresh.setBackgroundResource(R.drawable.refresh_icon); 
     Log.v("size of popup isssss",mPopUpList.getHeight()+">>>>>>>>"); 
     holder.mRefresh.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Log.i("position clickjed of refresh icon and pressso is to be synced isssssss",pos+">>>>>"+mSelectedPresentation.get(pos).get_pId()); 
        new SendNotificationStatus(context, mSelectedPresentation.get(pos).get_pId(), mUserId, "1", PresentationListAdapter.this).execute(); 

        //new GetPresentationData(context, mUserId, mSelectedPresentation.get(pos).get_pId(), PresentationListAdapter.this).execute(); 

        mPopUpList.dismiss(); 

       } 
      }); 
      }else{ 
      holder.mRefresh.setBackgroundResource(R.drawable.refresh_black_icon); 

     } 
     if(mPosition.equalsIgnoreCase(mSelectedPressoId)){ 
      Log.i("position inside if isssssss",mPosition+">>>>>>>>>"); 
      holder.Title.setTextColor(Color.BLACK); 
      holder.mTickView.setVisibility(View.VISIBLE); 
      holder.mLayout.setBackgroundColor(R.color.dark_grey); 
      holder.mRefresh.setVisibility(View.VISIBLE); 
      holder.mDelete.setVisibility(View.VISIBLE); 
     }else{ 
      if(syncStaus.equalsIgnoreCase("0")){ 
       holder.mRefresh.setVisibility(View.VISIBLE); 
        holder.mRefresh.setBackgroundResource(R.drawable.refresh_icon); 
      }else{ 
       holder.mRefresh.setVisibility(View.GONE); 
      } 
      holder.Title.setTextColor(R.color.grey); 
      holder.mTickView.setVisibility(View.GONE); 
      holder.mLayout.setBackgroundColor(0x00000000); 

      holder.mDelete.setVisibility(View.GONE); 
     } 
     //convertview.setTag(R.string.close, mSelectedPresentation.get(pos)); 
    return convertview; 
} 

static class Viewholder{ 

    TextView Title; 
    Button mRefresh; 
    Button mDelete; 
    LinearLayout mLayout; 
    ImageView mTickView; 


} 


@Override 
public void OnTaskComplete(String t) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void OnTaskFailure(String t) { 
    // TODO Auto-generated method stub 

} 
// Creating the PopupWindow 
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, -convertDipToPixels(20), 0); 
    mRefreshPopUp.showAtLocation(v, Gravity.TOP, 0, 0); 
    } 


    } 
+0

что вы переходящая в контексте вашего всплывающего окна. –

+0

Мой контекст активности – swati

+0

попробуйте использовать активность, т. Е. YourActivity.this вместо контекста. –

ответ

0

Declare активность

Activity activity; 

Pass активность в конструкторе

public PresentationListAdapter(Activity activity,Context context,ArrayList<SelectedPresentationdata> mSelectedPresentation,String mPosition,PopupWindow mWindow) { 
// TODO Auto-generated constructor stub 
this.activity=activity; 
this.context=context; 
this.mSelectedPresentation=mSelectedPresentation; 
this.mPosition=mPosition; 

Log.d("vie wissssss",mPopUpList+">>>>>>>"); 
this.mPopUpList=mWindow; 
mCommonMethod=new CommonMethod(context); 
mUserId=PreferenceConnector.readString(context, PreferenceConnector.USER_ID, ""); 

} 

Ваш PopupWindow Код

public void displayRefreshPopUp(View layout,int popupWidth,int popupHeight,View v, Rect location){ 
mRefreshPopUp = new PopupWindow(activity); 
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, -convertDipToPixels(20), 0); 
    mRefreshPopUp.showAtLocation(v, Gravity.TOP, 0, 0); 
    } 
+0

Спасибо за ваш комментарий, но этот код откроет первое всплывающее окно, которое также отлично работает на моем конце. Приходит, когда я попытался открыть следующее всплывающее окно по щелчку списка первого opopup. – swati

+0

Я просто даю вам пример для использования активности измените контекстную ссылку на активность в вашем всплывающем окне. –

+0

Я пробовал с этим, но получаю тот же результат – swati

Смежные вопросы