我有一個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