なんじゃくにっき

プログラミングの話題中心。

勉強会用くじAndoroidプログラム

Scala勉強会in渋谷のページにてくじびきアプリを誰か作れ!というのを発見したので作ってみた。
http://atnd.org/events/9889#comment
 
Andoroidじゃなくてスクリプト版はid:xuweiさんが作ってくれていたので、大分助かった。
http://d.hatena.ne.jp/xuwei/20101112/1289572517
 
 
作ったのはこんなやつ

ソースは以下。
なんか色々と汚い・・

package scala.example.hello

import android._
import app.Activity
import os.Bundle
import widget._
import view.View
import view.View.OnClickListener

import org.xmlpull.v1.{XmlPullParser, XmlPullParserFactory}
import XmlPullParser._

import java.io.StringReader

import scala.collection.mutable.ArrayBuffer
import scala.util.Random

class HelloActivity extends Activity {
var arr = Array[String]()

override def onCreate(savedInstanceState: Bundle) {
val me = this
super.onCreate(savedInstanceState)
setContentView(R.layout.main)

val EditText01 = findViewById(R.id.EditText01).asInstanceOf[EditText]
EditText01.setText("http://api.atnd.org/events/users/?event_id=10100")

val items = (0 to 10).map(n => n.toString).toArray
val spinner01 = findViewById(R.id.Spinner01).asInstanceOf[Spinner]
val spinner02 = findViewById(R.id.Spinner02).asInstanceOf[Spinner]
spinner01.setAdapter(new ArrayAdapter[String](me, R.layout.spinnerlist, items))
spinner02.setAdapter(new ArrayAdapter[String](me, R.layout.spinnerlist, items))
spinner01.setSelection(5)
spinner02.setSelection(5)

findViewById(R.id.Button01).asInstanceOf[Button].setOnClickListener(
new OnClickListener {def onClick(v: View) {
val url: String = EditText01.getText.toString
val str = scala.io.Source.fromURL(url).getLines.mkString
val buffer = new ArrayBuffer[String]

val parser = XmlPullParserFactory.newInstance.newPullParser
parser.setInput(new StringReader(str))

var eventType = parser.getEventType
while (eventType != END_DOCUMENT) {
eventType = parser.next()
if (eventType == START_TAG &&
parser.getName.equals("nickname")) {
buffer + parser.nextText
}
}

arr = buffer.toArray
me.findViewById(R.id.ListView01).asInstanceOf[ListView]
.setAdapter(new ArrayAdapter[String](me, R.layout.list, arr))
}})

findViewById(R.id.Button02).asInstanceOf[Button].setOnClickListener(
new OnClickListener {def onClick(v: View) {
val num1 = spinner01.getSelectedItem.toString.toInt
val num2 = spinner02.getSelectedItem.toString.toInt

val list1 = (arr.filter(s => s != "kaigaiengineer")) take num1 toList
val list2 = Random.shuffle(arr.filter(s => s != "kaigaiengineer")
.drop(num1).toList) take num2
arr = (list1 ::: list2).toArray
me.findViewById(R.id.ListView01).asInstanceOf[ListView]
.setAdapter(new ArrayAdapter[String](me, R.layout.list, arr))
}})
}
}

 
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#A0F0FF">

<TableLayout android:id="@+id/TableLayout01"
android:layout_width="fill_parent"
android:layout_height="wrap_content">

<TableRow android:id="@+id/TableRow01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="40sp">

<TextView android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/TextView01"
android:textSize="20sp"
android:textColor="#000000"/>

<Spinner android:id="@+id/Spinner01"
android:layout_width="wrap_content"
android:layout_height="fill_parent"/>

</TableRow>
<TableRow android:id="@+id/TableRow02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="40sp">

<TextView android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/TextView02"
android:textSize="20sp"
android:textColor="#000000"/>

<Spinner android:id="@+id/Spinner02"
android:layout_width="wrap_content"
android:layout_height="fill_parent"/>

</TableRow>
</TableLayout>
<EditText android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">

<Button android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Button01"
/>

<Button android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Button02"
/>

</LinearLayout>
<ListView
android:id="@+id/ListView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

</LinearLayout>

string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">shuffle</string>
<string name="TextView01">席数(確定)</string>
<string name="TextView02">席数(抽選)</string>
<string name="Button01">参加者を取得</string>
<string name="Button02">抽選</string>
</resources>

12/1 勉強会で要望があったのでlayout/main.xmlとlayout/string.xml追加。