কেন অনকে () দুবার ডাকা হয়?


85

আমি এই কোডটি ব্যবহার করছি:

public boolean onKey(View v, int keyCode, KeyEvent event) {
msg = (EditText)findViewById(R.id.msg);
String message = msg.getText().toString();
            if(keyCode == 66)
            {
                //It's hitting here twice.          
            }
            return false;
        };

কেউ দয়া করে আমাকে বলতে পারেন যে আমি এন্ট্রি টিপলে এটি কেন দুবার আঘাত করছে?


18
একবার নিচে, একবার উপরে? অনক্যাডাউন () বা অনকিইউপ () ব্যবহার করে দেখুন বা কী-ইভেস্ট.জেটঅ্যাকশন () দেখুন।
— benvd

উত্তর:


210

অনকিকে দু'বার বরখাস্ত করা হয়েছে: প্রথমবার কী ডাউন করার জন্য এবং দ্বিতীয়বার কী আপের জন্য, সুতরাং আপনাকে ফিল্টার করতে হবে:

YOUR_VIEW.setOnKeyListener(new OnKeyListener()
        {                           
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {

                //This is the filter
                if (event.getAction()!=KeyEvent.ACTION_DOWN)
                    return true;

                switch (keyCode) {
                case KeyEvent.KEYCODE_1 : 
                    MakeToast(1);
                    break;
                case KeyEvent.KEYCODE_2 : 
                    MakeToast(2);
                    break;
                case KeyEvent.KEYCODE_3 : 
                    MakeToast(3);
                    break;

                }

                return true;
            }

        });

4
সত্য বা মিথ্যা প্রত্যাবর্তনের সুপার ক্লাসগুলির কোনও অর্থ আছে?
— OrhanC1

6
প্রক্রিয়াভুক্ত নয় এমন কীগুলিতে আপনাকে মিথ্যা ফিরিয়ে দেওয়া উচিত?
— ইওস্টানে

4
দৃশ্যত এটি return falseকীগুলির প্রক্রিয়াজাতকরণের জন্য হওয়া উচিত । আমি এই কোড করা এবং কখন EditTextআমার অ্যাপ্লিকেশানের স্টপ ব্যাক বোতাম সাড়া ... ফোকাস হয়েছে
— luiges90

এটি করার ফলে কী-ভিভেন্ট ডিপ্যাড_সেন্টার অনক্লিক হিসাবে শোনা বন্ধ হবে
— এ_আরমাস

জন্য ধন্যবাদ event.getAction()!=KeyEvent.ACTION_DOWN, কিন্তু আমি falseএই ক্ষেত্রে ফিরে । যদি true, অন্য কোনও কী গ্রাস করা হবে। এমনকি আপনি ব্যাক বোতাম দিয়ে আপনার ক্রিয়াকলাপ / খণ্ডটি প্রস্থান করবেন না!
— কুলমাইন্ড

1
 itemView.setOnKeyListener(new View.OnKeyListener() {
  @Override
  public boolean onKey(View v, int keyCode, KeyEvent event) {
    int pos = getAdapterPosition();
    if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_MENU){
     //code here
    }
    return false;
  }
 });

0
edittext.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int i, KeyEvent keyEvent) {
            if (keyEvent.getAction() == KeyEvent.ACTION_DOWN || keyEvent.getAction() == KeyEvent.ACTION_UP) {
                switch (i) {
                    case KeyEvent.KEYCODE_ENTER:
                        if (!HelperFunction.isStringEmpty(edittext.getText().toString())) {

                            if (loadCount == 0) {

                                loadCount ++;


                            }
                        }
                    default:
                        return false;
                }
            }
            return false;
        }

এই কোড ব্লক কোডটি দু'বার কল করা বাধা দেয়। আমি লোডকাউন্ট স্ট্রিং মান ব্যবহার করি, যদি লোডকাউন্ট == 0 আমার কোড ব্লক চালান এবং আমি আমার ব্লকটিতে লোডকাউন্ট ++ করছি। সুতরাং আমার কোড সময়মতো ব্লক করে।


আপনার কোডটি কী করে এবং কীভাবে এটি সমস্যার সমাধান করে তার একটি ব্যাখ্যা সরবরাহ করার বিষয়ে বিবেচনা করুন।
— অঙ্কিত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.