0

I have a GridView A in a PopupWindow A.

And I just want to close the PopupWindow A, if I click one item in the GridView A.

Now It's just like when I open the result Fragment, the PopupWindow A keep stay on the screen.

And the PopupWindow A is also popup from a item in a GridView B.

So I've implement the AdapterView.OnItemClickListener to the GridView B.

GridViewImplement.java:
public AdapterView.OnItemClickListener mOnItemClickListener = new AdapterView.OnItemClickListener(){
   @Override
   public void onItemClick(AdapterView<?> adapterView, View view, int i, long id){

      View popupView = activity.getLayoutInflater().inflate(R.layout.popup, null);
      final PopupWindow mPopupWindow = new PopupWindow(popupView, 800, 500, true); 

      if(id != 0){

        GridView gridViewA = (GridView)popupView.findViewById(R.id.gridview_a_popup);
        GridViewAdapter gridViewAdapter = new GridViewAdapter(activity, list, true);
        gridViewA.setAdapter(gridViewAdapter);

        GridViewImplement impl =  new GridViewImplement(activity).
        gridView.setOnItemClickListener(impl.mOnItemClickListener);

        Button closeButton = (Button) popupView.findViewById(R.id.btn_popup_close);
                if (closeButton != null) {
                    closeButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            mPopupWindow.dismiss();// here is works.
                        }
                    });
                }

      }else{
        mPopupWindow.dismiss();// here not work.

        Bundle bundle = new Bundle();
        activity.replaceFragment(ResultFragment.newInstance(),bundle,R.id.fragment_result);

      }
   }
}

modify code

GridViewImplement.java:

PopupWindow mPopupWindow;

public AdapterView.OnItemClickListener mOnItemClickListener = new AdapterView.OnItemClickListener(){
   @Override
   public void onItemClick(AdapterView<?> adapterView, View view, int i, long id){

      View popupView = activity.getLayoutInflater().inflate(R.layout.popup, null);


      if(id != 0){
        mPopupWindow = new PopupWindow(popupView, 800, 500, true);
        GridView gridViewA = (GridView)popupView.findViewById(R.id.gridview_a_popup);
        GridViewAdapter gridViewAdapter = new GridViewAdapter(activity, list, true);
        gridViewA.setAdapter(gridViewAdapter);

        GridViewImplement impl =  new GridViewImplement(activity).
        gridView.setOnItemClickListener(impl.mOnItemClickListener);

        Button closeButton = (Button) popupView.findViewById(R.id.btn_popup_close);
                if (closeButton != null) {
                    closeButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            mPopupWindow.dismiss();// here will warning need key 'final'.
                        }
                    });
                }

      }else{
        mPopupWindow.dismiss();// here not work.

        Bundle bundle = new Bundle();
        activity.replaceFragment(ResultFragment.newInstance(),bundle,R.id.fragment_result);

      }
   }
}

works code got form my friend

GridViewImplement.java:
public AdapterView.OnItemClickListener mOnItemClickListener = new AdapterView.OnItemClickListener(){
   @Override
   public void onItemClick(AdapterView<?> adapterView, View view, int i, long id){

      View popupView = activity.getLayoutInflater().inflate(R.layout.popup, null);
      final PopupWindow mPopupWindow = new PopupWindow(popupView, 800, 500, true);

      if(id != 0){
        GridView gridViewA = (GridView)popupView.findViewById(R.id.gridview_a_popup);
        GridViewAdapter gridViewAdapter = new GridViewAdapter(activity, list, true);
        gridViewA.setAdapter(gridViewAdapter);

        //GridViewImplement impl =  new GridViewImplement(activity).
        //gridView.setOnItemClickListener(impl.mOnItemClickListener);// here just use a total new implement. 
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                        mPopupWindow.dismiss();// works here.
                        Bundle bundle = new Bundle();
                        activity.replaceFragment(ResultFragment.newInstance(),bundle,R.id.fragment_result);

                    }
                });

        Button closeButton = (Button) popupView.findViewById(R.id.btn_popup_close);
                if (closeButton != null) {
                    closeButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            mPopupWindow.dismiss();// works here
                        }
                    });
                }

      }else{
        //mPopupWindow.dismiss(); // here looks like not needed any more.

        Bundle bundle = new Bundle();
        activity.replaceFragment(ResultFragment.newInstance(),bundle,R.id.fragment_result);

      }
   }
}
JerryZhou
  • 4,566
  • 3
  • 37
  • 60

1 Answers1

0

You can set an OnClickListener for your GridView and add popupWindow.dismiss() to close the popup. Basically doing something like this:

gridView.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
    popupWindow.dismiss();
  }
}
Niels
  • 313
  • 2
  • 9