关于Kotlin
用kotlin已经半个月左右了,关于kotlin我觉得其实确实是一个很好用的语言,没错是很好用,因为她底层吧很多固有的代码部分都封装好了,而且还有有一个增强的Anko库,用起来很舒服
但是毕竟不可能真的那么简洁,语言从没有一家独大,但做到这个地步已经很简了
今天主要写了个Listview以及其适配器
其实并不难也没有什么新东西,不过是换了一种语法去编写,主要是类之间的东西,比如构造比如静态等等,可能写法上有一定区别,但本质上是一样的
展示一下今天的代码成果吧
布局文件正常写,我只把活动页代码和适配器放上来
下面这步是Activity中下载数据源和设置适配器
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var arr:ArrayList<Food> = ArrayList();
Thread(Runnable {
val readText = URL("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1").readText()
val jsonObject = JSONObject(readText)
val jsonArray = jsonObject.getJSONArray("data")
for (i in 0..jsonArray.length()-1 step 1){
val jsonObject1 = jsonArray.getJSONObject(i)
val title = jsonObject1.getString("title")
val food_str = jsonObject1.getString("food_str")
val pic = jsonObject1.getString("pic")
val food = Food(title, food_str, pic)
println("###"+food)
arr?.add(food)
}
}).start()
println("###"+arr==null)
mylist.adapter = MyAdapter(this, arr!!)
}
}
下面这步是适配器内部
class MyAdapter : BaseAdapter {
var context:Context? = null;
var arr:ArrayList<Food>? = null;
constructor(context: Context,arr:ArrayList<Food>){
this.context =context
this.arr =arr
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var viewHolder:ViewHolder? = null;
var view:View? = null;
println("###123456")
if(convertView == null){
viewHolder = ViewHolder()
view = View.inflate(context,R.layout.list_item,null)
viewHolder.title = view.findViewById(R.id.title)
viewHolder.foodstr = view.findViewById(R.id.foodstr)
viewHolder.image = view.findViewById(R.id.pic)
view.tag = viewHolder
}else{
view = convertView
viewHolder = view.tag as ViewHolder
}
viewHolder.title?.text = arr!!.get(position).title
viewHolder.foodstr?.text = arr!![position].str
Glide.with(context).load(arr!![position].pic).into(viewHolder.image)
return view!!
}
inner class ViewHolder{
var title:TextView? = null;
var foodstr:TextView? = null;
var image:ImageView? = null;
}
override fun getItem(position: Int): Any {
return position
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getCount(): Int {
return arr!!.size
}
}
是不是没有太大的不同,只是语法上多了非空判断,但是总体上代码量是减少了的
条目布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/pic"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/foodstr"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>