কোনও সম্পাদনা পাঠ ফোকাস হারিয়ে ফেললে আমি কীভাবে জানতে পারি?


162

যখন কোনও EditTextদৃষ্টি নিবদ্ধ হারাবে তখন আমাকে ধরতে হবে , আমি অন্যান্য প্রশ্নগুলি অনুসন্ধান করেছি তবে আমি কোনও উত্তর পাই না।

আমি OnFocusChangeListenerএই মত ব্যবহার

OnFocusChangeListener foco = new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        // TODO Auto-generated method stub

    }
};

তবে, এটি আমার পক্ষে কাজ করে না।

উত্তর:


342

বাস্তবায়ন onFocusChangeএর setOnFocusChangeListenerএবং সেখানে hasFocus জন্য একটি বুলিয়ান প্যারামিটার আছে। যখন এটি মিথ্যা হয়, আপনি অন্য নিয়ন্ত্রণের প্রতি মনোযোগ হারিয়ে ফেলেছেন।

 EditText txtEdit = (EditText) findViewById(R.id.edittxt);

 txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() {          
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
               // code to execute when EditText loses focus
            }
        }
    });

20
+1 - তবে লক্ষণীয় যে আপনার সম্পাদনা পাঠ্যটি যদি তালিকার তালিকায় থাকে তবে প্রতিটি কী নীচে বাক্সটি হারাবে এবং ফোকাস পাবে। : বর্তমানে নিবদ্ধ বক্স ট্র্যাক রাখতে এই সমাধান দেখুন stackoverflow.com/questions/9527067/...
bsautner

আপনার প্রদর্শিত কোডটি আমি কোথায় যুক্ত করব? যদি আমি এটি "অনক্রিয়েট" এর মতো করে রাখি তবে অ্যাপটি ক্র্যাশ হয়ে গেছে
জোনা

@ লোন পেলেটিয়ার সত্য? সত্যি? ব্যবহারকারী অন্য ফোকাসযোগ্য নিয়ন্ত্রণকে স্পর্শ করে এবং সম্পাদনা পাঠ এটি হারিয়ে ফেলে। আমি কোন সমস্যা দেখতে পাচ্ছি না। আপনি যদি আপনার কোড দ্বারা ফোকাস সেট করেন তবে এটি একই রকম।
অবিশ্বাস্য জানুয়ারী

@ জোনা আপনি এটি যে কোনও জায়গায় যুক্ত করতে পারেন তবে অনক্রিট () কাজ করে। যদি এটি ক্র্যাশ হয় তবে আপনি কিছু ভুল করছেন।
অবিশ্বাস্য জানুয়ারী

8

আপনি যদি এই ইন্টারফেসটির একটি গুণিতকাজ ব্যবহার করতে চান তবে আপনার Activityপ্রয়োগ OnFocusChangeListener()করুন, উদাহরণস্বরূপ:

public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{

আপনার মধ্যে OnCreateআপনি উদাহরণস্বরূপ একটি শ্রোতা যুক্ত করতে পারেন:

editTextResearch.setOnFocusChangeListener(this);
editTextMyWords.setOnFocusChangeListener(this);
editTextPhone.setOnFocusChangeListener(this);

তারপরে অ্যান্ড্রয়েড স্টুডিও আপনাকে ইন্টারফেস থেকে পদ্ধতিটি যুক্ত করার অনুরোধ জানাবে, এটি গ্রহণ করবে ... এটি এমন হবে:

@Override
public void onFocusChange(View v, boolean hasFocus) {
// todo your code here...
}

এবং যেহেতু আপনি একটি অনুষঙ্গযুক্ত কোড পেয়েছেন, আপনাকে কেবল এটি করতে হবে:

@Override
public void onFocusChange(View v, boolean hasFocus) {
   if (hasFocus) {
        editTextResearch.setText("");
        editTextMyWords.setText("");
        editTextPhone.setText("");
    }
    if (!hasFocus){
        editTextResearch.setText("BlaBlaBla");
        editTextMyWords.setText(" One Two Tree!");
        editTextPhone.setText("\"your phone here:\"");
    }
}

আপনি যা কিছু কোড করেন তা !hasFocusহ'ল আইটেমের আচরণের জন্য যা ফোকাস হারাতে পারে, সেই কৌশলটি করা উচিত! তবে সাবধান হন যে এই জাতীয় অবস্থায়, ফোকাসের পরিবর্তনটি ব্যবহারকারীর এন্ট্রিগুলিকে ওভাররাইট করতে পারে!


1
কেন কেবল 'অন্য' ব্যবহার করুন না কেন '! ফোকাস' এর পরিবর্তে
সালমান নাজির

সেই সময় আমি কেবল জিনিসগুলি খুব স্পষ্ট করে তুলতে চেয়েছিলাম, তবে আমি যেমন বলেছি এটি যেভাবেই হয় ততটা ব্যবহারযোগ্য নয় ...
সারবারাস


1

এটি সঠিকভাবে কাজ করছে

EditText et_mobile= (EditText) findViewById(R.id.edittxt);

et_mobile.setOnFocusChangeListener(new OnFocusChangeListener() {          
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            // code to execute when EditText loses focus
            if (et_mobile.getText().toString().trim().length() == 0) {
                CommonMethod.showAlert("Please enter name", FeedbackSubmtActivity.this);
            }
        }
    }
});



public static void showAlert(String message, Activity context) {

    final AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage(message).setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                }
            });
    try {
        builder.show();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

0

জাভা 8 লম্বা এক্সপ্রেশন ব্যবহার করে:

editText.setOnFocusChangeListener((v, hasFocus) -> {
    if(!hasFocus) {
        String value = String.valueOf( editText.getText() );
    }        
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.