আমি আমার লগকটে নিম্নলিখিত সতর্কতাটি পেয়েছি।
getExtractedText on inactive InputConnection
আমি এর পিছনে কারণ খুঁজে পেতে অক্ষম। সাহায্য করুন
আমি আমার লগকটে নিম্নলিখিত সতর্কতাটি পেয়েছি।
getExtractedText on inactive InputConnection
আমি এর পিছনে কারণ খুঁজে পেতে অক্ষম। সাহায্য করুন
উত্তর:
আমি একটি অনুরূপ ইস্যু মধ্যে দৌড়ে। আমার লগক্যাট:
W/IInputConnectionWrapper(21214): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(21214): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(21214): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(21214): getTextAfterCursor on inactive InputConnection
...
I/Choreographer(20010): Skipped 30 frames! The application may be doing too much work on its main thread.
আমার পরিস্থিতি: আমি ব্যবহারকারীর প্রকারে একটি সম্পাদনা পাঠ্য দর্শন পেয়েছি। এডিটেক্সট সাফ হয়ে যায় যখন ব্যবহারকারী কোনও বোতাম টিপে দেয়। যখন আমি দ্রুত বোতাম টিপতাম তখন প্রচুর নিষ্ক্রিয় ইনপুট সংযোগ এন্ট্রি প্রবাহিত হয়।
উদা:
editText.setText(null);
উপরের আমার লোগকটের শেষ লাইনটি ঘটছে তার দুর্দান্ত ইঙ্গিত দেয়। নিশ্চিতভাবেই, ইনপুট সংযোগটি পাঠ্যটি সাফ করার অনুরোধ দ্বারা অভিভূত হয়েছে। আমি কোডটি সাফ করার চেষ্টা করার আগে পাঠ্য দৈর্ঘ্যের জন্য যাচাই করার জন্য কোডটি সংশোধন করার চেষ্টা করেছি:
if (editText.length() > 0) {
editText.setText(null);
}
এই সমস্যাটি প্রশমিত করতে সাহায্য করে যে বোতামটি টিপুন দ্রুত চাপ দেওয়ার ফলে আর আইএনপুট সংযোগের সংঘটিত সতর্কতাগুলির প্রবাহের কারণ হয় না। তবে এটি এখনও সমস্যার ঝুঁকির মধ্যে রয়েছে যখন ব্যবহারকারী কোনও অ্যাপ্লিকেশন পর্যাপ্ত লোডের মধ্যে থাকা অবস্থায় কোনও কিছু টাইপ করতে এবং বোতাম টিপতে বা বোতাম টিপানোর মধ্যে দ্রুত পরিবর্তন করে etc.
ভাগ্যক্রমে, আমি পাঠ্যটি সাফ করার জন্য আরও একটি উপায় খুঁজে পেয়েছি: সম্পাদনাযোগ্য ক্লেয়ার () । এটি দিয়ে আমি কোনও হুঁশিয়ারি পাই না:
if (editText.length() > 0) {
editText.getText().clear();
}
নোট করুন যে আপনি সমস্ত ইনপুট স্থিতি পরিষ্কার করতে চান এবং কেবল পাঠ্য নয় (অটোটেক্সট, অটোক্যাপ, মাল্টিট্যাপ, পূর্বাবস্থায়), আপনি TextKeyListener.clear (সম্পাদনযোগ্য ই) ব্যবহার করতে পারেন ।
if (editText.length() > 0) {
TextKeyListener.clear(editText.getText());
}
হালনাগাদ:
আমি ইনপুট সংযোগের সতর্কতাগুলি পাওয়ার কারণটি আমি যেখানে পাঠ্যটি সেট করছিলাম তা নয় (যেমন, onTextChanged
কলব্যাকে বা afterTextChanged
)) - কারণ এটি আমি ব্যবহার করছিলাম setText
।
ফোন করে আমি বিষয়টিটি পেয়েছি:
hiddenKeyboardText.getText().clear();
hiddenKeyboardText.append("some string");
দ্রষ্টব্য: আমি afterTextChanged
কলব্যাকটিতে কলটি এখনও করছি , যদিও এটি কোনও সতর্কতা ছাড়াই কাজ করে ontextChanged
।
পূর্ববর্তী উত্তর:
লগকটে আমি একই ধরণের বার্তা পাচ্ছিলাম, যদিও আমার দৃশ্যপট কিছুটা আলাদা ছিল। আমি সম্পাদনা পাঠ্য প্রতিটি অক্ষর (বা রচিত অক্ষর / আটকানো পাঠ্য) পড়তে চেয়েছিলাম, এবং তারপরে প্রশ্নে সম্পাদনা পাঠকে একটি ডিফল্ট সূচনা স্ট্রিংয়ে পুনরায় সেট করতে চাই।
উপরের জনসনের সমাধান অনুসারে স্পষ্ট পাঠ্যের অংশটি কাজ করে। তবে পাঠ্যটি পুনরায় সেট করা সমস্যাযুক্ত ছিল এবং আমি ইনপুট সংযোগের সতর্কতা পেয়েছি।
প্রথমদিকে, আমার onTextChanged(CharSequence s, ...)
নিম্নরূপ হিসাবে সংজ্ঞা দেওয়া হয়েছিল:
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (isResettingKeyboard)
return;
// ... do what needs to be done
resetKeyboardString();
}
public void resetKeyboardString()
{
isResettingKeyboard = true;
hiddenKeyboardText.getText().clear();
hiddenKeyboardText.setText(keyboardInitString);
hiddenKeyboardText.setSelection(defaultKeyboardCursorLocation);
isResettingKeyboard = false;
}
যখন onTextChanged(...)
ডাকা হয়, সম্পাদনা পাঠটি কেবল পঠন মোডে থাকে। আমি নিশ্চিত নই যে এর অর্থ আমরা যদি কল getText.clear()
করার চেয়ে বেশি কিছু করতে না পারি ( setText(...)
কলগুলি ইনপুট সংযোগের সতর্কতাও উত্পন্ন করে)।
যাইহোক, কলব্যাকটি afterTextChanged(Editable s)
পাঠ্য সেট করার জন্য সঠিক জায়গা।
@Override
public void afterTextChanged(Editable s) {
if (isResettingKeyboard)
return;
resetKeyboardString();
// ...
}
এটি এখন পর্যন্ত, কোনও সতর্কতা ছাড়াই কাজ করছে।
afterTextChanged
পদ্ধতিটি hiddenKeyboardText.getText().clear();
পাশাপাশি চালু করা হয়েছে hiddenKeyboardText.append("some string");
এবং এই ঘটনাটিও বিবেচনায় নেওয়া উচিত। আমার কাছ থেকে +1!
if (isResettingKeyboard) return;
শীর্ষে থাকা নিশ্চিত করা গুরুত্বপূর্ণ ...
সহায়তা নথি থেকে
http://developer.android.com/reference/android/view/inputmethod/InputConnection.html
ইনপুট সংযোগ ইন্টারফেসটি একটি ইনপুটমেথড থেকে অ্যাপ্লিকেশনটিতে ফিরে আসে যা এর ইনপুট গ্রহণ করে channel এটি কার্সারের চারপাশে পাঠ্য পাঠ করা, পাঠ্য বাক্সে পাঠ্য প্রতিশ্রুতিবদ্ধ করা এবং অ্যাপ্লিকেশনটিতে কাঁচা কী ইভেন্টগুলি প্রেরণ করা যেমন ব্যবহার করা হয়।
এছাড়াও, আরও পঠন শো
getExtectedText (): ইনপুট সংযোগটি অবৈধ হয়ে উঠলে ( যেমন এটির প্রক্রিয়া ক্রাশ হওয়া) বা ক্লায়েন্টটি পাঠ্যের সাথে প্রতিক্রিয়া জানাতে খুব বেশি সময় নিচ্ছে (এটি ফিরে আসতে কয়েক সেকেন্ড সময় দেওয়া হয়) এই পদ্ধতিটি ব্যর্থ হতে পারে । উভয় ক্ষেত্রেই, একটি নাল ফেরত দেওয়া হয়।
এটি এ জাতীয় পাঠ্যের পরিবর্তনগুলি এবং সতর্কতা পরিবর্তনের উপর নজর রাখে to
ইস্যুটি নীচে নেওয়ার জন্য আপনাকে যে কোনও ডাটাবেস ক্যোয়ারী তৈরি করতে হবে, সম্ভবত লেআউটভিউ বা বিন্যাসে তালিকাগুলির আশেপাশে।
যদি আপনার কোনও মতামত না থাকে, উদাহরণস্বরূপ এটি ব্যাকগ্রাউন্ডে এলোমেলোভাবে ঘটছে, তবে আমি প্রস্তাব দেব যে এটি কোনও ইউআই উপাদান নয়, তাই পাঠ্যক্ষেত্র এবং এগুলি উপেক্ষা করুন। এটি একটি পটভূমি পরিষেবা হতে পারে যা কোনও কার্সারে তথ্য সংরক্ষণ করে বা কার্সারের অনুরোধ করে।
এছাড়াও, সমস্যাটি কি আপনার অ্যাপ থেকে উত্থাপিত হয়? বা সম্ভবত আপনি সম্প্রতি ইনস্টল করা অন্য কারও। সম্পূর্ণ লগগেটের ট্রেস তালিকাভুক্ত করুন। কেউ হয়ত বিষয়টি চিনতে পারে।
আমি একটি অনুমানকে ঝুঁকিতে ফেলব যে আপনি যদি এর চারপাশে সুনির্দিষ্ট কিছু না লিখে থাকেন তবে এটির কোনও লোকের লগ বার্তা, অথবা সম্ভবত আপনার ব্যবহারের কোনও লাইব্রেরি?
আমি একই সমস্যা ছিল। আমার EditTexts
এবং ক্রিয়াকলাপটি ফোকাস হারিয়ে ফেললে নরম কীবোর্ড সক্রিয় হওয়ার পরে সতর্কতাটি উপস্থিত হয়েছিল ।
আমি যা করেছি তা হ'ল অনপজ () -র কীবোর্ডটি লুকানো;
@Override
protected void onPause() {
// hide the keyboard in order to avoid getTextBeforeCursor on inactive InputConnection
InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
super.onPause();
}
এই সমস্যাটি আমার জন্য সমাধান করুন সম্ভবত আপনারও একই সমস্যা রয়েছে।
এটি একটি সৃষ্টি হয়েছিল অবজেক্ট মধ্যে HeaderView এর তালিকা অ্যাডাপ্টার ।
আমি একটি স্ফীত দেখুন এবং ঘোষিত অবজেক্ট এবং করা TextWatcher এটিতে।
View v = LayoutInflater.from(CONTEXT).inflate(R.layout.in_overscrollview, null);
Object= (Object) v.findViewById(R.id.OBJECT_ID);
Object.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after){
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Do my work
//Update my view
}
});
এটিকে তালিকার অ্যাডাপ্টারে যুক্ত করে অ্যাডাপ্টারটি তৈরি করে।
JobListView = (ListView) getListView().findViewWithTag("JOBLISTVIEWTAG");
JobListView.addHeaderView(v, null, false);
JobsAdapter = new IN_JOBS_ADAPTER(CONTEXT, ITEMS_FOR_ADATER);
ListView.setAdapter(JOBSadapter);
পাঠ্য প্রহরী কাজ করে সবকিছু ঠিক আছে ।
কিন্তু যদি আমি কখনো প্রাথমিক বিল্ড পর অ্যাডাপ্টারের পুনর্নির্মিত।
JobsAdapter = new IN_JOBS_ADAPTER(CONTEXT, DIFFERENT_ITEMS_FOR_ADAPTER);
ListView.setAdapter(JOBSadapter);
যে HeaderView খুব পুনর্নির্মিত হয়।
এই সতর্কতাটি প্রদর্শন করবে কারণ অবজেক্টটি সরানো হয়েছিল এবং পাঠ্য প্রহরীটি এখনও এটির জন্য নজর রাখছিল।
তালিকা অ্যাডাপ্টার এবং অবজেক্ট প্রতিস্থাপিত হয়েছে, এবং আমি অনুমান করছি টেক্সট প্রহরী যখন এটা ঘটেছে অন্যান্য উপায় খুঁজছিলাম।
তাই সতর্কতা যায় বন্ধ এবং দৈবক্রমে টেক্সট প্রহরী খুঁজে বের করে HeaderView এবং অবজেক্ট । তবে এটি ফোকাস হারিয়ে ফেলে এবং সেই সতর্কতা লগ করে।
ব্যবহার
JOBSadapter.notifyDataSetChanged();
সমস্যাটি স্থির করল।
কিন্তু যদি আপনি একটি আছে অবজেক্ট ভিতরে অ্যাডাপ্টার , এবং টেক্সট প্রহরী সংযুক্ত বস্তু ভিতরে অ্যাডাপ্টার । তাহলে আপনার আরও কিছু কাজ করার প্রয়োজন হতে পারে।
শ্রোতাদের সরানোর চেষ্টা করুন এবং আপনি যে কাজ করছেন তা করার পরে এটিকে আবার সংযুক্ত করুন।
Object.removeTextChangedListener();
অথবা
Object.addTextChangedListener(null);
অ্যান্টনিওমের উত্তর ছাড়াও, নিশ্চিত হয়ে নিন যে আর কোনও ক্রিয়াকলাপ করা দরকার ছিল, সত্যিই কি-বোর্ডটি আড়াল করার পরে সম্পন্ন করা হয়েছে, সুতরাং যদি আপনি নীচের মত কীবোর্ডটি লুকিয়ে রাখেন:
public void hideKeyboard() {
InputMethodManager inputMethodManager =(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
}
, কীবোর্ডটি লুকানোর পরে আপনার সফল ক্রিয়াগুলি সম্পাদন করা দরকার:
getWindow().getDecorView().post(new Runnable() {
@Override
public void run() {
finish(); //Sample succeeding code
}
});
আমাকে এডিট টেক্সট থেকে পাঠ্য সংশোধন করতে বা পাঠানোর সময় আমার এই সমস্যা হয়েছিল এবং এটি ফোকাস করা হয়েছিল।
সুতরাং এটি পরিবর্তন করুন বা এগুলি পাওয়ার আগে আমি কীবোর্ডটি বন্ধ করে দিয়েছি এবং এটি ঠিক করেছি।
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
হতে পারে, আপনার সমস্যাটি ভিন্ন।
আমি এই জাতীয় xML এ একটি ইনপুট প্রকার tingোকানোর ক্ষেত্রে আমার সমস্যার সমাধান করেছি: অ্যান্ড্রয়েড: ইনপুট টাইপ = "কিছুই নয় | পাঠ্য | পাঠ্যক্যাপওয়ার্ডস | টেক্সটরি"
এর আগে অ্যান্ড্রয়েড ছিল: ইনপুটটাইপ = "পাঠ্য" এটি আমার সমস্যার সমাধান করে।
আমার সমস্যা দৃশ্যমানতা সেটিং দ্বারা সৃষ্টি হয়েছিল EditText
করার GONE
অবিলম্বে এবং তারপর থেকে এটি সেটিং VISIBLE
প্রতিটি সময় ব্যবহারকারী একটি অক্ষর টাইপ করা, আমি প্রতিটি সময় পাঠ্য পরিবর্তন এবং কিছু কিছু ক্ষেত্রে দৃশ্য আড়াল করা প্রয়োজন ইনপুটের বৈধতা দৌড়াচ্ছিলাম।
সমাধানটি হ'ল ইউআই বা রাষ্ট্রীয় আপডেটগুলির মধ্যে GONE এ ভিউ বা লেআউটের দৃশ্যমানতা সেট করা এড়ানো, কারণ এতে EditText
ফোকাসটি হারাতে পারে
যদি একই সমস্যা হয় তবে আমার রাষ্ট্রবিহীন উইজেটটিকে স্টেটফুল উইজেটে রূপান্তর করে এটি ঠিক করুন আপনি এটি চেষ্টা করতে পারেন