如何在Delphi中扩展java类?
实际上我需要在JResultReceiver中实现onReceiveResult事件以在函数showSoftInput中使用(view:JView; flags:Integer; resultReceiver:JResultReceiver):Boolean;
但JResultReceiver的delphi接口甚至不包含此事件:(
[JavaSignature('android/os/ResultReceiver')]
JResultReceiver = interface(JObject)
['{BBFBBD02-25B2-49B9-B441-CFB8DF3AA9C5}']
function describeContents: Integer; cdecl;
procedure send(resultCode: Integer; resultData: JBundle); cdecl;
procedure writeToParcel(out_: JParcel; flags: Integer); cdecl;
end;
TJResultReceiver = class(TJavaGenericImport<JResultReceiverClass, JResultReceiver>) end;
这是我想要做的java代码示例:
// try to show the keyboard and capture the result
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
IMMResult result = new IMMResult();
imm.showSoftInput(editText, 0, result);
// if keyboard doesn't change, handle the keypress
int res = result.getResult();
if (res == InputMethodManager.RESULT_UNCHANGED_SHOWN ||
res == InputMethodManager.RESULT_UNCHANGED_HIDDEN) {
showTags();
}
/**
* To capture the result of IMM hide/show soft keyboard
*/
private class IMMResult extends ResultReceiver {
public int result = -1;
public IMMResult() {
super(null);
}
@Override
public void onReceiveResult(int r, Bundle data) {
result = r;
}
// poll result value for up to 500 milliseconds
public int getResult() {
try {
int sleep = 0;
while (result == -1 && sleep < 500) {
Thread.sleep(100);
sleep += 100;
}
} catch (InterruptedException e) {
Log.e("IMMResult", e.getMessage());
}
return result;
}
}