Android 如果GridView位于PopupWindow中,如何在GridView的监听器中关闭PopupWindow
我在PopupWindow a中有一个GridView a 我只想关闭弹出窗口A,如果我单击GridView A中的一个项目 现在就像当我打开结果片段时,弹出窗口会一直留在屏幕上 PopupWindow A也是从GridView B中的项目弹出的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(){
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”赋值”为什么