package com.smartisanos.sidebar.setting; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.TextView; import android.widget.CompoundButton.OnCheckedChangeListener; import com.smartisanos.sidebar.R; import com.smartisanos.sidebar.util.ResolveInfoGroup; import com.smartisanos.sidebar.util.ResolveInfoManager; import smartisanos.widget.SwitchEx; public final class AddResolveInfoGroupAdapter extends BaseAdapter { private Context mContext; private List<Item> mList = new ArrayList<Item>(); public AddResolveInfoGroupAdapter(Context context) { mContext = context; refreshData(); } private ResolveInfoManager.ResolveInfoUpdateListener mUpdateListener = new ResolveInfoManager.ResolveInfoUpdateListener() { @Override public void onUpdate() { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { onDataChange(); } }); } }; private void onDataChange() { for (Item item : mList) { boolean added = ResolveInfoManager.getInstance(mContext).isResolveInfoGroupAdded(item.rig); item.checked = added; } notifyDataSetChanged(); } public void onStart() { refreshData(); notifyDataSetChanged(); ResolveInfoManager.getInstance(mContext).addListener(mUpdateListener); } public void onStop() { ResolveInfoManager.getInstance(mContext).removeListener(mUpdateListener); } public void refreshData() { mList.clear(); for (ResolveInfoGroup rig : ResolveInfoManager .getInstance(mContext).getAddedResolveInfoGroup()) { mList.add(new Item(rig, true)); } for (ResolveInfoGroup rig : ResolveInfoManager .getInstance(mContext).getUnAddedResolveInfoGroup()) { mList.add(new Item(rig, false)); } } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final Item item = mList.get(position); View view = convertView; final ViewHolder vh; if (view == null) { view = LayoutInflater.from(mContext).inflate(R.layout.setting_item_switch_layout, null); vh = new ViewHolder(); vh.iconView = (ImageView) view.findViewById(R.id.item_icon); vh.titleView = (TextView) view.findViewById(R.id.item_title); vh.switchView = (SwitchEx) view.findViewById(R.id.item_switch); view.setTag(vh); } else { vh = (ViewHolder) view.getTag(); } vh.iconView.setImageDrawable(item.rig.getAvatar()); vh.titleView.setText(item.rig.getDisplayName()); vh.switchView.setOnCheckedChangeListener(null); vh.switchView.setChecked(item.checked); vh.switchView.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (item.checked == isChecked) { return; } if (isChecked) { if (ResolveInfoManager.getInstance(mContext).addResolveInfoGroup(item.rig)) { item.checked = true; } else { vh.switchView.setChecked(false); } } else { ResolveInfoManager.getInstance(mContext).delete(item.rig); item.checked = false; } } }); return view; } final class ViewHolder { public ImageView iconView; public TextView titleView; public SwitchEx switchView; } private final class Item { public ResolveInfoGroup rig; public boolean checked; public Item(ResolveInfoGroup rig, boolean checked) { this.rig = rig; this.checked = checked; } } }