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


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.