Androidのライブラリを使用してターミナルエミュレータに接続しています。これはシリアルデバイス(スイッチ)に接続し、送受信されたデータを表示します。どちらの場合も、端末の下にあるテキストボックスを介して、または端末自体を入力してキーボードのEnterキーを押すことにより、接続を介してデータを送信します。ボタンを押してコマンドを送信することもできます。
私の問題は、ボタンで送信されたコマンドやシリアルデバイスから受信したデータのように、端末自体が強調表示されている場合は常にUIが更新されないことです。端末自体を入力すると、文字が表示されます。editTextを選択すると、すべてが正常に更新されます。したがって、ターミナルを選択してコマンドを送信すると、editTextを選択したときにのみ画面に表示されます。editTextを選択した後も、ターミナルをもう一度押すまで更新されないことがよくあります。非常に奇妙な。だから私の無効化はうまく機能していませんか?それとも、私が使用していて本当に理解していないのは、このnotifyUpdateメソッドですか?
私が現在行っているのは、データを受信したときにメソッドを呼び出すことです。このメソッドは、1000ミリ秒ごとに画面を更新するハンドラーを呼び出します。しかし、これは端末が選択されている場合は機能しません。これはなぜですか?「ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。」というエラーが発生します。</p>
スクリーンショット:http://i.imgur.com/s4mTt.png
//terminal view
EmulatorView view = (EmulatorView) findViewById(R.id.emulatorView);
mEmulatorView = view;
public void onDataReceived(int id, byte[] data)
{
dataReceived = new String(data);
((MyBAIsWrapper) bis).renew(data);
mSession.write(dataReceived);
mSession.notifyUpdate();
viewHandler.post(updateView);
}
Handler viewHandler = new Handler();
Runnable updateView = new Runnable() {
@Override
public void run() {
mEmulatorView.invalidate();
viewHandler.postDelayed(updateView, 1000);
}
}
};
私が使用しているライブラリの関連コード:
[code]protected void notifyUpdate() {
if (mNotify != null) {
mNotify.onUpdate();
}
}[/code]
と
/**
* Generic callback to be invoked to notify of updates.
*/
public interface UpdateCallback {
/**
* Callback function to be invoked when an update happens.
*/
void onUpdate();
}
これは、メソッドnotifyUpdate()の説明です-クラスjackpal.androidterm.emulatorview.TermSessionのメソッドsetUpdateCallbackによって登録されたUpdateCallbackに、画面が変更されたことを通知します。
mSession.notifyUpdate();かもしれないと思いました。私のコードでは、しかしどうやら私が同じエラーが発生したとコメントした場合、その行はとにかく私のために何もしていないようです。エラーがどこにあるのかわからないので、どこを押しても画面が常に更新されます。