update menu
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
package com.github.shadowsocks.database
|
||||
|
||||
import android.content.{DialogInterface, Context}
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.BaseAdapter
|
||||
import android.widget.TextView
|
||||
import com.github.shadowsocks.R
|
||||
import android.view.View.OnClickListener
|
||||
|
||||
case class Item(id: Int, title: String, iconRes: Int, action: Int => Unit)
|
||||
|
||||
case class Category (title: String)
|
||||
|
||||
object MenuAdapter {
|
||||
|
||||
trait MenuListener {
|
||||
def onActiveViewChanged(v: View)
|
||||
}
|
||||
|
||||
val UNDEFINED = -1
|
||||
val CATEGORY = 0
|
||||
val ITEM = 1
|
||||
|
||||
}
|
||||
|
||||
class MenuAdapter (context: Context, var items: List[Any]) extends BaseAdapter {
|
||||
|
||||
def setListener(listener: MenuAdapter.MenuListener) {
|
||||
mListener = listener
|
||||
}
|
||||
|
||||
def setActivePosition(activePosition: Int) {
|
||||
mActivePosition = activePosition
|
||||
}
|
||||
|
||||
@Override def getCount: Int = {
|
||||
items.size
|
||||
}
|
||||
|
||||
@Override def getItem(position: Int): Object = {
|
||||
items(position).asInstanceOf[Object]
|
||||
}
|
||||
|
||||
@Override def getItemId(position: Int): Long = {
|
||||
position
|
||||
}
|
||||
|
||||
@Override override def getItemViewType(position: Int): Int = {
|
||||
getItem(position) match {
|
||||
case Category => MenuAdapter.CATEGORY
|
||||
case Item => MenuAdapter.ITEM
|
||||
case _ => MenuAdapter.UNDEFINED
|
||||
}
|
||||
}
|
||||
|
||||
@Override override def getViewTypeCount: Int = {
|
||||
3
|
||||
}
|
||||
|
||||
@Override override def isEnabled(position: Int): Boolean = {
|
||||
getItemViewType(position) != MenuAdapter.UNDEFINED
|
||||
}
|
||||
|
||||
@Override override def areAllItemsEnabled: Boolean = {
|
||||
false
|
||||
}
|
||||
|
||||
@Override def getView(position: Int, convertView: View, parent: ViewGroup): View = {
|
||||
var v: View = convertView
|
||||
val item = getItem(position)
|
||||
item match {
|
||||
case value: Category =>
|
||||
if (v == null) {
|
||||
v = LayoutInflater.from(context).inflate(R.layout.menu_row_category, parent, false)
|
||||
}
|
||||
v.asInstanceOf[TextView].setText(value.title)
|
||||
case value: Item =>
|
||||
if (v == null) {
|
||||
v = LayoutInflater.from(context).inflate(R.layout.menu_row_item, parent, false)
|
||||
}
|
||||
val tv: TextView = v.asInstanceOf[TextView]
|
||||
tv.setText(value.title)
|
||||
tv.setCompoundDrawablesWithIntrinsicBounds(value.iconRes, 0, 0, 0)
|
||||
tv.setOnClickListener(new OnClickListener {
|
||||
def onClick(view: View) {
|
||||
val item = view.getTag(R.id.mdItem).asInstanceOf[Item]
|
||||
item.action(item.id)
|
||||
}
|
||||
})
|
||||
|
||||
v.setTag(R.id.mdItem, value)
|
||||
case _ =>
|
||||
}
|
||||
v.setTag(R.id.mdActiveViewPosition, position)
|
||||
|
||||
if (position == mActivePosition) {
|
||||
if (mListener != null) mListener.onActiveViewChanged(v)
|
||||
}
|
||||
v
|
||||
}
|
||||
|
||||
def updateList(list: List[Any]) {
|
||||
items = list
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
private var mListener: MenuAdapter.MenuListener = null
|
||||
private var mActivePosition: Int = 0
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user