fixed java.lang.IndexOutOfBoundsException while invoking toString on GL thread.

This commit is contained in:
James Chen 2016-05-26 15:49:05 +08:00
parent 23c5c18c91
commit d42b99b10b
1 changed files with 9 additions and 3 deletions

View File

@ -132,14 +132,17 @@ public class Cocos2dxEditBoxHelper {
} }
@Override @Override
public void onTextChanged(final CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
//The optimization can't be turn on due to unknown keyboard hide in some custom keyboard //The optimization can't be turn on due to unknown keyboard hide in some custom keyboard
// mFrameLayout.setEnableForceDoLayout(false); // mFrameLayout.setEnableForceDoLayout(false);
// Note that we must to copy a string to prevent string content is modified
// on UI thread while 's.toString' is invoked at the same time.
final String text = new String(s.toString());
mCocos2dxActivity.runOnGLThread(new Runnable() { mCocos2dxActivity.runOnGLThread(new Runnable() {
@Override @Override
public void run() { public void run() {
Cocos2dxEditBoxHelper.__editBoxEditingChanged(index, s.toString()); Cocos2dxEditBoxHelper.__editBoxEditingChanged(index, text);
} }
}); });
} }
@ -168,10 +171,13 @@ public class Cocos2dxEditBoxHelper {
Log.d(TAG, "edit box get focus"); Log.d(TAG, "edit box get focus");
} else { } else {
editBox.setVisibility(View.GONE); editBox.setVisibility(View.GONE);
// Note that we must to copy a string to prevent string content is modified
// on UI thread while 's.toString' is invoked at the same time.
final String text = new String(editBox.getText().toString());
mCocos2dxActivity.runOnGLThread(new Runnable() { mCocos2dxActivity.runOnGLThread(new Runnable() {
@Override @Override
public void run() { public void run() {
Cocos2dxEditBoxHelper.__editBoxEditingDidEnd(index, editBox.getText().toString()); Cocos2dxEditBoxHelper.__editBoxEditingDidEnd(index, text);
} }
}); });
mFrameLayout.setEnableForceDoLayout(false); mFrameLayout.setEnableForceDoLayout(false);