コメント |
@DIV
package sample.lightbox.androidbind1017;
import android.databinding.DataBindingUtil;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.NumberPicker;
import android.widget.Spinner;
import android.widget.TextView;
import com.google.gson.Gson;
import sample.lightbox.androidbind1017.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
// *************************************************
// 変数定義
// *************************************************
// WebView のインスタンス
private WebView wv = null;
// 表示されているページの URL
private String startPage = null;
// 初期表示ページ
private String initPage = "http://winofsql.jp/002.php";
private String[] list_data = {"営業部第一", "営業部第二", "営業部第三"};
private String[] list_value = {"0001", "0002", "0003"};
private Gson gson = null;
private Syain syain = null;
private Handler handler = null;
// *************************************************
// 画面定義から自動作成されるクラス
// ※ 名称は、xml のファイル名から作成されています
// *************************************************
private ActivityMainBinding binding = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// *************************************************
// 初期画面表示
// *************************************************
binding = DataBindingUtil.setContentView(MainActivity.this, R.layout.activity_main);
// 共有情報
Syain.context = MainActivity.this;
Syain.np = (NumberPicker) MainActivity.this.findViewById(R.id.numberPicker);
Syain.sp = (Spinner)MainActivity.this.findViewById(R.id.spinner);
Syain.dp = (DatePicker)MainActivity.this.findViewById(R.id.datePicker);
// 初回バインド
syain = new Syain();
syain.setupSeibetuControl();
syain.setupSyozokuControl(list_data);
syain.setupBirthControl(true, false);
binding.setUser(syain);
// ダミーフィールドによる、先頭スクロールと 他のコントロールからのフォーカスオフ
((TextView)MainActivity.this.findViewById(R.id.topText)).requestFocus();
// *************************************************
// Webページの JavaScript の呼び出し
// *************************************************
MainActivity.this.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText et = (EditText) MainActivity.this.findViewById(R.id.editText);
String scode = ((EditText) MainActivity.this.findViewById(R.id.editText)).getText().toString();
String callString = String.format("javascript:getWebPageData(\"%s\")", scode);
wv.loadUrl(callString);
}
});
// *************************************************
// SET
// *************************************************
MainActivity.this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
syain.furi = "ヘンコウサレマシタ";
syain.setSeibetuControl("2");
// 全ての Syain の内容を反映
// ※ @Bindable を使う事のメリットが無いので( fromJson が setter を使わない )
binding.invalidateAll();
}
});
// *************************************************
// GET
// *************************************************
MainActivity.this.findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// バインドは片方向なので入力結果を Syain に反映させる
syain.scode = ((EditText)MainActivity.this.findViewById(R.id.editText)).getText().toString();
syain.getSeibetuControl();
syain.getSyozokuControl(list_value);
syain.getBirthControl(MainActivity.this.findViewById(R.id.datePicker));
String json = gson.toJson(syain);
// この内容をサーバに送る
Log.i("lightbox",json);
}
});
// *************************************************
// 主要インスタンス
// *************************************************
handler = new Handler();
gson = new Gson();
// *************************************************
// WebView の目的ページ表示
// *************************************************
wv = (WebView) MainActivity.this.findViewById(R.id.webView);
// 目的のページを表示する
wv.loadUrl(initPage);
// *************************************************
// WebView の準備 ( 開始 )
// *************************************************
// Webページとのインターフェイスを登録します
// Webページ上からは、androidObject.toAndroid で呼ぶ事ができます
// (toAndroid は、@JavascriptInterface で登録したメソッド)
wv.addJavascriptInterface(new JavaScriptAccess(new JavaScriptAccess.OnGetWebDataListener() {
@Override
public void onWebGetDataListener(String textData) {
try {
syain = gson.fromJson(textData, Syain.class);
// 別スレッドから UI スレッドへのアクセス
handler.post(new Runnable() {
@Override
public void run() {
// *************************************
// 画面表示
// *************************************
binding.setUser(syain);
if ( !syain.kj.equals("ERROR")) {
// 現在の内容でコントロールセット( fromJson 用なので、null 指定 )
syain.setSeibetuControl(null);
syain.setSyozokuControl(null, list_value);
syain.setBirthControl(null);
// fromJson によって、syain にデータはセットされるので、画面に反映させる
binding.invalidateAll();
// ダミーフィールドによる、先頭スクロールと 他のコントロールからのフォーカスオフ
((TextView)MainActivity.this.findViewById(R.id.topText)).requestFocus();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}), "androidObject");
// 必ず必要な JavaScript を有効にする設定
wv.getSettings().setJavaScriptEnabled(true);
// 必ず必要な設定
wv.setWebViewClient(new WebViewClient() {
// 必ず必要な設定 : 常に WebView 内でページを表示する為
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("lightbox", "shouldOverrideUrlLoading" + url);
return super.shouldOverrideUrlLoading(view, url);
}
// オプション : 表示されたページの URL を変数にセット
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.i("lightbox", "onPageStarted:" + url);
startPage = url;
}
// オプション : ページを表示し終わってから発生するイベント
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
// *************************************************
// WebView の準備 ( 終わり )
// *************************************************
}
@Override
protected void onStop() {
super.onStop();
wv.clearHistory();
wv.clearCache(true);
Log.i("lightbox", "onStop");
}
}
@END |