我有一个想要更改为 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;
}
}
我总是有这个基本结构:我在其中实例化的一些私有 UI 元素onCreateView
,做一些事情并返回视图(此处未显示:在其他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
}
}
那么,我可以在这里改进什么?myTextView
是private var
因为我必须在这个 Fragment 中访问它的几个方法。似乎我不能做这里解释的东西:http: //blog.andresteingress.com/2011/09/20/programming-android-with-scala/和lazy val
TypedActivity
隐式转换OnClickListener
,因为我使用片段。那么如何摆脱样板代码.asInstanceOf[T]
并使其更像 Scala 呢?