c++ 调用java 篇:
c++调用java。同事刷新android的Edit View控件
第一步:
第二步:创建布局文件
第三步:
public static EditText myView;
第四步:添加文本输入框
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
myView =(EditText)LayoutInflater.from(this).inflate(R.layout.myedit,framelayout,false);
myView.addTextChangedListener(watcher);
myView.setMovementMethod(ScrollingMovementMethod.getInstance());
framelayout.addView(myView);
第五步:添加监听
TextWatcher watcher = new TextWatcher()
{
@Override
public void afterTextChanged(Editable s)
{
// TODO Auto-generated method stub
Log.d(TAG,111111);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
// TODO Auto-generated method stub
Log.d(TAG,22222);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
Log.d(TAG,33==[TextWatcher][onTextChanged]+s);
}
};
第六步:
public static void hideAdView(String[] str)
{
mHandler.obtainMessage( 100, str ).sendToTarget();
}
private static HandlermHandler =new Handler()
{
public void handleMessage(Message msg)
{
switch (msg.what)
{
case 100://UPDATE_UI:
{
String[] arrStrings = (String[])msg.obj;
if(arrStrings[0].equals(I'm a titile))
{
TestJni.this.myView.setText(C++ Change Java EditView string Test!);
}
}
break;
default:
break;
}
}
};
补充:
//myView.setBackgroundColor(Color.TRANSPARENT);//改变背景色透明
//framelayout.removeView(myView);//移除控件
C++部分代码
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include platform/android/jni/JniHelper.h
void HelloWorld::goJava()
{
JniMethodInfo jmi;
if(JniHelper::getStaticMethodInfo(jmi , org/cocos2dx/TestJni/TestJni , hideAdView , ([Ljava/lang/String;)V))
{
jclass str_cls = jmi.env->FindClass(java/lang/String);
jstring str1 = jmi.env->NewStringUTF(I'm a titile);
jstring str2 = jmi.env->NewStringUTF(Are yor exit game?);
jobjectArray arrs = jmi.env->NewObjectArray(2 , str_cls , 0);
jmi.env->SetObjectArrayElement(arrs , 0 , str1);
jmi.env->SetObjectArrayElement(arrs , 1 , str2);
jmi.env->CallStaticVoidMethod(jmi.classID , jmi.methodID , arrs);
}
}
#endif
然后调用
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
goJava();
#endif
最后编译c++和android