我有一个Java Android应用程序,我想更改为Scala。我有很多片段,我想知道在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中做这件事的最好方法是什么?
--- UPDATE ---
我的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
,因为我必须在这个片段中访问它几种方法。看来我不能做这里解释的东西:http://blog.andresteingress.com/2011/09/20/programming-android-with-scala/与lazy val
TypedActivity
和OnClickListener
的隐式转换,因为我使用片段。那么我怎样才能摆脱.asInstanceOf[T]
的样板代码,并使其更像斯卡拉?
感谢您的回答。第一步已经完成,IDE已经建立,而且它工作正常。我已经删除了私有类成员,并使用“val”作为UI元素。所以,我想进一步尝试改进它。 – Tim 2013-03-04 07:28:26
好!我认为现在是时候在GitHub或类似网站上发布“发现”,并让人们知道源代码是否在那里,这样建议就变得更加集中在你前往的位置。祝你好运! – 2013-03-04 15:59:38
我更新了我的问题,并放入了一些Scala代码。也许你有一些想法,我可以在这里改进? – Tim 2013-03-09 17:43:01