ハブには、このテーマに関する投稿が既にありました。 例:
これ
しかし、魂は常に可能な限り簡単な解決策を求めます。 Scalaのサポートを追加するために必要なAntや他のgemmoroyに基づくほとんどのメソッドとは異なり、このメソッドは非常にシンプルで高速です。 そして、Eclipseのすばらしいプラグイン-Treeshakerはこれを助けてくれます。
それで、何をする必要がありますか?
ドックを読みたくない人のために、私はインストールと私と一緒に生じた一つのニュアンスについて説明します。
- Android用の開発用に環境(Eclipse + Googleのプラグイン)を既に構成している必要があります。 プラグイン(Scala IDE)をインストールする必要があります。 Eclipse Help-> Install New Softwareアイテムに移動し、サイトをリストに追加します: download.scala-ide.org/releases-28/2.0.0-betaおよびNextなどをクリックします。
- 次に、上記の段落と同じスキームに従って、TreeShakerをインストールし、サイトアドレスとして追加します: treeshaker.googlecode.com/svn/trunk/update_site
以上です! 必要なものはすべてインストールしました。
それでは、使用方法を見てみましょう。
- そして、新しいAndroidプロジェクトを作成します
- プロジェクトを右クリックして、[構成]項目で[Scala Natureの追加]サブ項目を選択します。 そして、lo! Scala-プロジェクトに追加されたライブラリ
- 次に、プロジェクトをもう一度右クリックして、リストにTreeShakerの追加/削除項目を表示します
次に、Javaコードを削除し、代わりに次を挿入します。
import android.os.Bundle import android.view.View import android.widget.TextView import android.widget.Button import android.app.Activity import R._ class ThreeShakerTutorialActivity extends Activity { lazy val textView = findViewById(R.id.text).asInstanceOf[TextView] lazy val button = findViewById(R.id.button).asInstanceOf[Button] override def onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) setContentView(R.layout.main) button.setOnClickListener((v: View) => textView.setText("Hello Scala")) } implicit def func2OnClickListener(func: (View) => Unit) = { new View.OnClickListener() { override def onClick(v: View) = func(v) } } }
main.xmlレイアウトのLinearLayoutで、コードで指定されたidキーを持つButtonおよびTextViewを追加します(マークアップはGoogleコードのwikiにありますが、私はハブパーサーが怖いです)。 すべて準備完了です!
すべてうまくいきますが、1つあります。 つまり、コード
button.setOnClickListener((v: View) => textView.setText("Hello Scala"))
コンパイルエラーをスローします。 この方法で修正しますが、これは悪い方法です。
button.setOnClickListener(func2OnClickListener((v: View) => textView.setText("Hello Scala")))
正しいもの、このコードはそのままです:
button.setOnClickListener((v: View) => textView.setText("Hello Scala"))
メソッドの定義を修正します。
implicit def func2OnClickListener(func: (View) => Unit): View.OnClickListener = { new View.OnClickListener() { override def onClick(v: View) = func(v) } }
このヘルプを提供してくれたromik habrayuzerに感謝します。
Scalaのレベルはよくわかりませんが、直感は素晴らしいことです。 著者がこの瞬間に気づかなかったのはどういうわけか奇妙です!
知識のある人は間違いがある理由を説明できますが、例の作者は明らかに何かを忘れていると思います。
Buildersプロジェクトプロパティに次のすべてが含まれていることを確認することが重要です。
- Androidリソースマネージャー
- Android Pre Compiler
- Scalaビルダー
- ツリーシェーカー
- Androidパッケージビルダー
それ以外の場合、プロジェクトをコンパイルして開始した後、エミュレータでClassNotFoundが実行されます。
デモプロジェクト- ここ