সংক্ষিপ্ত উত্তর
ব্যবহারকারী এবং প্রোগ্রামের ট্রিগার হওয়া ইভেন্টগুলির মধ্যে পার্থক্য করার জন্য বর্তমানে কোন ভিউয়ের ফোকাস রয়েছে তা আপনি পরীক্ষা করতে পারেন।
EditText myEditText = (EditText) findViewById(R.id.myEditText);
myEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (myEditText.hasFocus()) {
// is only executed if the EditText was directly changed by the user
}
}
//...
});
দীর্ঘ উত্তর
সংক্ষিপ্ত উত্তর অতিরিক্ত হিসাবে: যদি myEditText
ইতিমধ্যে ফোকাস যখন আপনি প্রোগ্রামের মাধ্যমে আপনি অন্য যে পাঠ্য কল করা উচিত পরিবর্তন হয়েছে clearFocus()
, তাহলে আপনি কল setText(...)
এবং ফোকাস আপনি পরে পুনরায় অনুরোধ। এটি একটি ইউটিলিটি ফাংশনে রাখা ভাল ধারণা হবে:
void updateText(EditText editText, String text) {
boolean focussed = editText.hasFocus();
if (focussed) {
editText.clearFocus();
}
editText.setText(text);
if (focussed) {
editText.requestFocus();
}
}
কোটলিনের জন্য:
যেহেতু কোটলিন এক্সটেনশন ফাংশনকে সমর্থন করে আপনার ইউটিলিটি ফাংশনটি দেখতে এরকম হতে পারে:
fun EditText.updateText(text: String) {
val focussed = hasFocus()
if (focussed) {
clearFocus()
}
setText(text)
if (focussed) {
requestFocus()
}
}