Scala に変更したい Java Android アプリケーションがあります。多くのフラグメントがあり、Scala でこれを行う最善の方法を知りたいです。
これは私のJavaフラグメントクラスMyFragment
です:
public class MyFragment extends Fragment {
private WebView myWebView;
private TextView myTextView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View myView = inflater.inflate(R.layout.my_view, container, false);
myWebView = (WebView) myView.findViewById(R.id.my_webview);
myWebView.loadUrl("http://www.google.com/");
myTextView = (TextView) myView.findViewById(R.id.my_textview);
myTextView.setText("Google.com");
return myView;
}
}
私は常にこの基本構造を持っています: でインスタンス化しonCreateView
、いくつかのことを行い、ビューを返すいくつかのプライベート UI 要素 (ここには示されていません: 他のon*
メソッドでは、UI 要素でいくつかのアクションも行います)。
ここで説明されているような記事をいくつか見つけましlazy val
た: http://blog.andresteingress.com/2011/09/20/programming-android-with-scala/
しかし、私の場合、フラグメントと活動ではありません。最初にメイン ビューをインフレートする必要がmyView
あり、それから UI 要素を取得できます。
Scalaでこれを行う最良の方法は何ですか?
- - アップデート - -
現在、私の Scala コードは次のようになっています。
class MyFragment extends Fragment {
private var myTextView: TextView = null
override def onCreateView(inflater: LayoutInflater,
container: ViewGroup, savedInstanceState: Bundle): View = {
val myView = inflater.inflate(R.layout.my_view, container, false)
val myWebView = myView.findViewById(R.id.my_webview).asInstanceOf[WebView]
myWebView.loadUrl("http://www.google.com/")
myTextView = myView.findViewById(R.id.my_textview).asInstanceOf[TextView]
myTextView.setText("Google.com")
myView
}
}
では、ここで何を改善できますか?この Fragment でいくつかのメソッドにアクセスする必要myTextView
があるためです。private var
ここで説明されていることはできないようです: http://blog.andresteingress.com/2011/09/20/programming-android-with-scala/ withlazy val
TypedActivity
と暗黙の変換OnClickListener
、私はフラグメントを使用しているためです。では、ボイラープレート コードを削除し.asInstanceOf[T]
て、より Scala に近づけるにはどうすればよいでしょうか?