2016-09-14 1 views
0

У меня есть диалоговое окно с предупреждением. Я показываю диалог оповещений по щелчку списка item.it работает fine.but, когда я нажимаю кнопку «Назад», диалоговое окно предупреждения не отменяется и отображается в activity.so, как я могу отклонить диалоговое окно предупреждения, когда я нажимаю назад с телефона.Как отключить диалоговое окно предупреждения при нажатии кнопки «Назад» в фрагменте?

Это мой адаптер класса: -

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

Моя проблема, когда я нажимаю на кнопку ОК в окне alertdialogue он распускать alertdialogue коробка. но когда я не нажимаю кнопку «ОК» (кнопка «Положительно») и нажимаю кнопку «Назад», диалоговое окно предупреждения отображается в действии, которое я собираюсь на кнопку «Назад».

+0

Я также поражен той же проблемой. Вы можете найти решение? –

ответ

0
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() 
        } 
       }); 
} 
+0

Дорогой сэр, я пробовал это, но в адаптере метод getview не вызывается, и когда я использую его во фрагменте, то как я могу использовать popupwindow во фрагменте, когда я определяю его в классе адаптера. – LoveAndroid

+0

Вы можете добавить новый параметр (тип представления) в конструктор Adapter, а затем установить на него KeyListener. или вы можете использовать широковещательную передачу. –

0

Если вы хотите, чтобы закрыть popupwindow по щелчку кнопки возврата просто добавьте этот код в свой класс фрагмента (хотя разные вещи работали для разных людей):

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

PopupWindow не имеет метода setCancelable (boolean) –

+0

my bad, должен был проверить его перед просто копированием и вставкой, обновил мой код –

+0

это не работает sir.i хочу, когда я нажимаю на кнопку «Назад» с моего телефона всплывающее окно, которое определение в классе адаптера должно быть закрыто. – LoveAndroid

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