【问题标题】:How can dismiss the alert dialogue box on the click of the back button in fragment?单击片段中的后退按钮如何关闭警报对话框?
【发布时间】:2016-09-14 18:58:57
【问题描述】:

我有一个警告对话框。我在单击列表项时显示警报对话框。它工作正常。但是当我按下后退按钮时,警报对话框不会关闭并显示在活动中。所以当我点击时如何关闭警报对话框手机的后退按钮。

这是我的适配器类:-

public class PgListAdapter extends RecyclerView.Adapter<PgListAdapter.FaqViewHolder> {

    private Context mContext;
    private List<Faq> faqList1;
    private ValueAnimator mAnimator;
    private int updatePosition = -1;
    private int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    private int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    private Faq ci;
    private PopupWindow popupWindow;


    public PgListAdapter(Context context, List<Faq> faqList) {
        mContext = context;
        this.faqList1 = faqList;



    }

 @Override
    public FaqViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_pglist, parent, false);
        FaqViewHolder vh = new FaqViewHolder(v);

        return vh;


    }

    @Override
    public void onBindViewHolder(final FaqViewHolder holder, int position) {
        ci = faqList1.get(position);
        holder.questionTv.setText(ci.getQuestion());
        holder.answerTextView.setText(ci.getAnswer());
        holder.Phone.setText(ci.getPhone());
        holder.pgAddress.setText(ci.getAddress());


        holder.ll_top.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {



          showFilter();


            }
        });


        holder.Phone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:" + holder.Phone.getText()));
                mContext.startActivity(intent);

            }
        });


        if (ci.isPGFull()) {
            holder.pgstatus.setVisibility(View.VISIBLE);
        } else {
            holder.pgstatus.setVisibility(View.INVISIBLE);
        }
    }


    @Override
    public int getItemCount() {
        return faqList1 == null ? 0 : faqList1.size();
    }





    class FaqViewHolder extends RecyclerView.ViewHolder {
        private RelativeLayout faqItemView;
        private RelativeLayout extendedView;
        private TextView questionTv, Phone;
        private TextView answerTextView, pgstatus, pgAddress;
        private LinearLayout ll_top;
        private LinearLayout ll_layout1;
        private ImageView arrowImgView;
        private int holderPosition;

        public FaqViewHolder(View itemView) {
            super(itemView);
            Phone = (TextView) itemView.findViewById(R.id.pgPhoneNo1);
            questionTv = (TextView) itemView.findViewById(R.id.pgOwner);
            answerTextView = (TextView) itemView.findViewById(R.id.pgPhoneNo);
            pgstatus = (TextView) itemView.findViewById(R.id.pgstatus);
            pgAddress = (TextView) itemView.findViewById(R.id.pgAddress);
            ll_top = (LinearLayout) itemView.findViewById(R.id.ll_top);
            ll_layout1 = (LinearLayout) itemView.findViewById(R.id.ll_layout1);




        }
    }


 public void showFilter() {
        View popupView = LayoutInflater.from(mContext).inflate(R.layout.pglist_popup, null);
        popupWindow = new PopupWindow(popupView, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);


        final TextView tv_phone = (TextView) popupView.findViewById(R.id.tv_phone);
        final LinearLayout ll_layout = (LinearLayout) popupView.findViewById(R.id.ll_layout);
        final LinearLayout ll_top = (LinearLayout) popupView.findViewById(R.id.ll_top);
        TextView tv_address = (TextView) popupView.findViewById(R.id.tv_address);
        final TextView btn_ok = (TextView) popupView.findViewById(R.id.btn_ok);

        // popupWindow.setBackgroundDrawable(new BitmapDrawable());
        popupWindow.setOutsideTouchable(false);
        popupWindow.setFocusable(false);


        tv_phone.setText(ci.getPhone());
        tv_address.setText(ci.getAddress());
        tv_phone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:" + tv_phone.getText()));
                mContext.startActivity(intent);


            }
        });


        btn_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupWindow.dismiss();
                popupWindow = null;

            }
        });




        popupWindow.showAsDropDown(popupView, 0, 0);




    }

}

这是我的 PgList 类:-

public class PgList extends Fragment implements WebServiceListener {


    private String responseCodeCameFromServer = "null";
    private String responseCameFromServer, responseMessageCameFromServer;
    private RecyclerView rvFaqs;
    private List<Faq> faqList = new ArrayList<>();
    private List<NameValuePair> basicNameValuePair;
    private GeneralUtilities generalUtilities;
    private SharedPreferencesUtilities sharedPreferencesUtilities;
    PgListAdapter pgAdapter;
    private View rootView;
    private TextView empty_view;
    ProgressDialog br;
    private PgList pgList;


    List<String> typelist = new ArrayList<String>();
    List<String> citylist = new ArrayList<String>();
    List<CityAreaDetails> temp = new ArrayList<>();

    Spinner type;
    WebServiceHandler webServiceHandler;


    public PgList() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


        if (rootView == null) {
            rootView = inflater.inflate(R.layout.pglist, container, false);

            generalUtilities = new GeneralUtilities(getActivity());
            sharedPreferencesUtilities = new SharedPreferencesUtilities(getActivity());
            br = new ProgressDialog(getContext());
            br.setTitle("Loading...");
            br.setCancelable(false);


            empty_view = (TextView) rootView.findViewById(R.id.tv_empty_view);

            empty_view.setText("Sorry for the Inconvience! We will update the list very soon for this Area. ");
            getActivity().setTitle("PG/Room List");
            typelist.add("Boys");
            typelist.add("Girls");
            citylist.clear();
            temp.clear();


            rvFaqs = (RecyclerView) rootView.findViewById(R.id.overviewRv);
            rvFaqs.setHasFixedSize(true);
            rvFaqs.addItemDecoration(new SpacesItemDecoration(20, 20, 12));
            rvFaqs.setLayoutManager(new LinearLayoutManager(getActivity()));

             rvFaqs.setAdapter(new PgListAdapter(getActivity(), faqList));
            webServiceHandler = new WebServiceHandler(getActivity());
            webServiceHandler.webServiceListener = PgList.this;
            HashMap<String, String> formData = new HashMap<>();
            formData.put("Type", "Boys");
            formData.put("CityAreaDetailsID", "1");
            if (br != null) {
                br.show();
            }
            //Checking internet connectivity and then requesting to the server
            Log.e("", "Data :" + formData);
            if (generalUtilities.isConnected()) {
                webServiceHandler.requestToServer((getResources().getString(R.string.api_end_point)) + "CityDetails",
                        WebService.ORDER, formData, true);
            } else {
                if (br != null) {
                    br.dismiss();
                }
                generalUtilities.showAlertDialog("Error", getResources().getString(R.string.internet_error), "OK");
            }

        }




        return rootView;
    }

我的问题是当我单击警报对话框的确定​​按钮时,它会关闭警报对话框。但是当我没有点击确定按钮(正按钮)并按下后退按钮时,警报对话框会显示在我正在后退按钮上的活动中。

【问题讨论】:

  • 我也遇到了同样的问题。你能找到解决办法吗?

标签: android listview adapter android-alertdialog


【解决方案1】:

如果您想在单击后退按钮时关闭弹出窗口,只需将此代码添加到您的片段类(尽管不同的事情对不同的人有用):

popUp.setBackgroundDrawable(new BitmapDrawable());// it is most important piece of code

// For Key Listeners

View v = popUp.getContentView();

//Here assigning the key Listners
v.setOnKeyListener(this);

@Override   
public boolean onKey(View v, int keyCode, KeyEvent event) {

    if(keyCode == KeyEvent.KEYCODE_BACK) popUp.dismiss();

    return false;

}//Implements the KeyListener
 //and be careful we should implement "OnKeyListener"`

或者,如果您想关闭警报对话框,请执行以下操作:

dialog.setOnKeyListener(new Dialog.OnKeyListener() {

        @Override
        public boolean onKey(DialogInterface arg0, int keyCode,
                KeyEvent event) {
            // TODO Auto-generated method stub
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                dialog.dismiss();
            }
            return true;
        }
    });

【讨论】:

  • PopupWindow 没有方法 setCancelable(boolean)
  • 我的错,应该在复制和粘贴之前验证它,更新我的代码
  • 这不起作用,先生。我希望当我从手机单击后退按钮时,应关闭在适配器类中定义的弹出窗口。
【解决方案2】:
getView().setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {    
                if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){

                    popupWindow.dismiss();

                    return true;    
                }    
                return false;
            }
        });
        super.onResume();

您需要在Fragment 中使用它来扩充列表项视图

for(...){
     View itemView.findViewHolderForAdapterPosition(index/position) 
     itemView.findViewById(R.id.ll_top).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       popupWindows.dismiss() 
                    }
                });
}

【讨论】:

  • 尊敬的先生,我试过了,但是在适配器中没有调用 getview 方法,当我在片段中使用它时,当我在适配器类中定义它时,如何在片段中使用 popupwindow。
  • 您可以在Adapter的构造函数中添加新的参数(View的类型),然后在其上设置KeyListener。或者你可以使用广播接收器。
猜你喜欢
  • 1970-01-01
  • 2017-11-13
  • 2011-10-30
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 2014-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多