Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果GridView位于PopupWindow中,如何在GridView的监听器中关闭PopupWindow_Android_Android Gridview_Android Popupwindow - Fatal编程技术网

Android 如果GridView位于PopupWindow中,如何在GridView的监听器中关闭PopupWindow

Android 如果GridView位于PopupWindow中,如何在GridView的监听器中关闭PopupWindow,android,android-gridview,android-popupwindow,Android,Android Gridview,Android Popupwindow,我在PopupWindow a中有一个GridView a 我只想关闭弹出窗口A,如果我单击GridView A中的一个项目 现在就像当我打开结果片段时,弹出窗口会一直留在屏幕上 PopupWindow A也是从GridView B中的项目弹出的 GridViewImplement.java: public AdapterView.OnItemClickListener mOnItemClickListener = new AdapterView.OnItemClickListener(){

我在PopupWindow a中有一个GridView a

我只想关闭弹出窗口A,如果我单击GridView A中的一个项目

现在就像当我打开结果片段时,弹出窗口会一直留在屏幕上

PopupWindow A也是从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);

      }
   }
}
因此,我将
AdapterView.OnItemClickListener
实现到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);

      }
   }
}
GridViewImplement.java:
public AdapterView.OnItemClickListener MonitorItemClickListener=新建AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView、View视图、int i、long id){
View popupView=activity.GetLayoutFlater().inflate(R.layout.popup,null);
最终PopupWindow mPopupWindow=新的PopupWindow(popupView,800500,true);
如果(id!=0){
GridView gridViewA=(GridView)popupView.findViewById(R.id.GridView\u a\u popup);
GridViewAdapter GridViewAdapter=新的GridViewAdapter(活动,列表,true);
setAdapter(gridViewAdapter);
GridViewImple=新的GridViewImple(活动)。
gridView.setOnItemClickListener(impl.MonitorClickListener);
按钮关闭按钮=(按钮)popupView.findViewById(R.id.btn\u popup\u close);
如果(关闭按钮!=null){
closeButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mPopupWindow.Disclesh();//下面是一些工作。
}
});
}
}否则{
mPopupWindow.dismise();//这里不起作用。
Bundle=新Bundle();
activity.replaceFragment(ResultFragment.newInstance(),bundle,R.id.fragment\u result);
}
}
}
修改代码

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

      }
   }
}
GridViewImplement.java:
弹出窗口;
public AdapterView.OnItemClickListener MonitorItemClickListener=新建AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView、View视图、int i、long id){
View popupView=activity.GetLayoutFlater().inflate(R.layout.popup,null);
如果(id!=0){
mPopupWindow=新的PopupWindow(popupView,800500,true);
GridView gridViewA=(GridView)popupView.findViewById(R.id.GridView\u a\u popup);
GridViewAdapter GridViewAdapter=新的GridViewAdapter(活动,列表,true);
setAdapter(gridViewAdapter);
GridViewImple=新的GridViewImple(活动)。
gridView.setOnItemClickListener(impl.MonitorClickListener);
按钮关闭按钮=(按钮)popupView.findViewById(R.id.btn\u popup\u close);
如果(关闭按钮!=null){
closeButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mPopupWindow.Disclose();//此处将显示需要键“final”的警告。
}
});
}
}否则{
mPopupWindow.dismise();//这里不起作用。
Bundle=新Bundle();
activity.replaceFragment(ResultFragment.newInstance(),bundle,R.id.fragment\u result);
}
}
}
从我朋友那里得到的代码

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

      }
   }
}
GridViewImplement.java:
public AdapterView.OnItemClickListener MonitorItemClickListener=新建AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView、View视图、int i、long id){
View popupView=activity.GetLayoutFlater().inflate(R.layout.popup,null);
最终PopupWindow mPopupWindow=新的PopupWindow(popupView,800500,true);
如果(id!=0){
GridView gridViewA=(GridView)popupView.findViewById(R.id.GridView\u a\u popup);
GridViewAdapter GridViewAdapter=新的GridViewAdapter(活动,列表,true);
setAdapter(gridViewAdapter);
//GridViewImple=新的GridViewImple(活动)。
//gridView.setOnItemClickListener(impl.MonitorClickListener);//这里只需使用一个全新的实现。
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
mPopupWindow.Dismise();//在这里工作。
Bundle=新Bundle();
activity.replaceFragment(ResultFragment.newInstance(),bundle,R.id.fragment\u result);
}
});
按钮关闭按钮=(按钮)popupView.findViewById(R.id.btn\u popup\u close);
如果(关闭按钮!=null){
closeButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mPopupWindow.Disclesh();//在这里工作
}
});
}
}否则{
//mPopupWindow.Dismise();//这里看起来不再需要了。
Bundle=新Bundle();
activity.replaceFragment(ResultFragment.newInstance(),bundle,R.id.fragment\u result);
}
}
}

您可以为GridView设置OnClickListener,并添加popupWindow.disclose()以关闭弹出窗口。基本上是这样做的:

gridView.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
    popupWindow.dismiss();
  }
}

我的实现有点复杂。让我包括一些代码。实际上,您正在使用onItemClick方法创建一个新的MPoppupWindow对象,并且您正在放弃这个新对象。@Krish那么,我应该将“final PopupWindow”代码移到哪里呢。或者我该如何重新组织这些功能。您能将其设为全局变量吗?如果不为null,请关闭popover。@Krish当我将其设为全局变量时,它会警告“无法为最终变量“mPopupWindow”赋值”为什么