http://blog.chinaunix.net/uid-20561882-id-3167146.html
自定义listview控件
点击(此处)折叠或打开
- public class SettingListView extends ListView {
-
- public ArrayList<HashMap<String, List<SettingItem>>> mSettingList = new ArrayList<HashMap<String, List<SettingItem>>>();
- protected LayoutInflater mInflater;
-
- // protected LinearLayout mContentView;
-
-
- public SettingListView(Context context, AttributeSet attrs) {
- super(context, attrs);
- mInflater = LayoutInflater.from(getContext());
- this.setDivider(null);
- // TODO Auto-generated constructor stub
-
- }
-
- public SettingListView(Context context) {
- super(context);
- mInflater = LayoutInflater.from(getContext());
- setDivider(null);
- }
-
- public void clearSettingList() {
- mSettingList.clear();
- }
-
- public void updateAdapter() {
- this.setAdapter(new SettingListAdapter());
- }
-
- public class SettingListAdapter extends BaseAdapter {
-
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
-
- return mSettingList.size();
- }
-
- @Override
- public Object getItem(int position) {
- // TODO Auto-generated method stub
-
- return mSettingList.get(position);
- }
-
- @Override
- public long getItemId(int position) {
- // TODO Auto-generated method stub
-
- return position;
- }
-
- @Override
- public View getView(int position, View view, ViewGroup parent) {
- // TODO Auto-generated method stub
-
-
- int divider = getContext().getResources().getDimensionPixelSize(
- R.dimen.detail_list_divider);
-
- String groupTitle = "";
- boolean isShowGroupTitle = false;
- view = mInflater.inflate(R.layout.setting_grouped_item_layout, null);
- LinearLayout mContentView = (LinearLayout) view.findViewById(R.id.group_root);
- TextView groupTitleView = (TextView) view.findViewById(R.id.group_title);
- View viewchild = null;
- HashMap<String, List<SettingItem>> settingItems = mSettingList.get(position);
- Iterator it = settingItems.entrySet().iterator();
- while (it.hasNext()) {
- java.util.Map.Entry entry = (java.util.Map.Entry) it.next();
- if (!"".equals(entry.getKey()) && !isShowGroupTitle) {
- groupTitle = (String) entry.getKey();
- isShowGroupTitle = true;
- groupTitleView.setText(groupTitle);
- groupTitleView.setVisibility(View.VISIBLE);
- }
-
- List<SettingItem> itemList = (List<SettingItem>) entry.getValue();
- int i = 0;
- for (SettingItem item : itemList) {
- switch (item.getType()) {
- case SettingItem.TEXT:
- // mWidget = (TextView)view.findViewById(R.id.widget);
-
- ViewHolderText viewHolderText = new ViewHolderText();
- viewchild = mInflater.inflate(
- R.layout.setting_entry_text, null);
- viewHolderText.mGroupTitle = (TextView) viewchild.findViewById(R.id.setting_name);
-
- if (item.getText() == null)
- viewHolderText.mGroupTitle.setVisibility(View.GONE);
- else {
- viewHolderText.mGroupTitle.setVisibility(View.VISIBLE);
- viewHolderText.mGroupTitle.setText(item.getText());
- }
- // viewchild.setOnClickListener(item.getClickListener());
-
- break;
- case SettingItem.IMAGE:
- ViewHolderImage viewHolderImage = new ViewHolderImage();
- viewchild = mInflater.inflate(
- R.layout.setting_entry_image, null);
- viewHolderImage.mGroupTitle = (TextView) viewchild.findViewById(R.id.setting_name);
- viewHolderImage.mWidget = (ImageView) viewchild.findViewById(R.id.widget);
-
- if (item.getText() == null)
- viewHolderImage.mGroupTitle.setVisibility(View.GONE);
- else {
- viewHolderImage.mGroupTitle.setVisibility(View.VISIBLE);
- viewHolderImage.mGroupTitle.setText(item.getText());
- }
-
- if (item.getImage() > 0) {
- viewHolderImage.mWidget.setBackgroundResource(item.getImage());
- viewHolderImage.mWidget.setVisibility(View.VISIBLE);
- } else {
- viewHolderImage.mWidget.setVisibility(View.GONE);
- }
- // viewchild.setOnClickListener(item.getClickListener());
-
- break;
-
- default:
- break;
- }
- viewchild.setTag(item);
- viewchild.setBackgroundDrawable(SkinFactory.from(getContext()).getSkinStyle().getDrawable(
- getBackgroup(i, itemList.size(), true)));
- viewchild.setOnClickListener(item.getClickListener());
- mContentView.addView(viewchild);
-
- LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams();
- if (params == null) {
- params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
- }
- if (i == itemList.size() - 1 && i != mSettingList.size() - 1)
- params.bottomMargin = divider;
-
-
- if (itemList.size() > 1 && i < itemList.size() - 1) {
- ImageView dividerImage = new ImageView(getContext());
- dividerImage.setBackgroundDrawable(SkinFactory.from(getContext()).getSkinStyle().getDrawable(
- getDividerStyle(i, itemList.size())));
- mContentView.addView(dividerImage, params);
- }
- i++;
- }
- }
-
- return view;
- }
- }
-
-
-
- public class ViewHolderText {
- public TextView mGroupTitle;
- }
-
- public class ViewHolderImage {
- public TextView mGroupTitle;
- public ImageView mWidget;
- }
-
- public class ViewHolderCheckbox {
- public TextView mGroupTitle;
- public CheckBox mCheckBox;
- }
-
- public class ViewHolderRadio {
- public TextView mGroupTitle;
- public RadioButton mRadio;
- }
- }
调用方法:
点击(此处)折叠或打开
- listView = (SettingListView)findViewById(R.id.list);
- getListItems();
- listView.updateAdapter();
-
- public void getListItems() {
- HashMap<String, List<SettingItem>> item;
- SettingItem settingItem = null;
- List<SettingItem> listItems = null;
- //----
-
- item = new HashMap<String, List<SettingItem>>();
- listItems = new ArrayList<SettingItem>();
- settingItem = new SettingItem(1, SettingItem.IMAGE);
- settingItem.setText(getString(R.string.account_setting_privacy));
- settingItem.setImage(R.drawable.setting_more);
- settingItem.setListener(this);
- listItems.add(settingItem);
-
- settingItem = new SettingItem(2, SettingItem.IMAGE);
- settingItem.setText(getString(R.string.account_setting_notification));
- settingItem.setListener(this);
- settingItem.setImage(R.drawable.setting_more);
- listItems.add(settingItem);
-
- settingItem = new SettingItem(3, SettingItem.IMAGE);
- settingItem.setText(getString(R.string.account_setting_save_phote));
- settingItem.setListener(this);
- settingItem.setImage(R.drawable.setting_more);
- listItems.add(settingItem);
- item.put("", listItems);
-
- listView.mSettingList.add(item);
- //----
-
- item = new HashMap<String, List<SettingItem>>();
- listItems = new ArrayList<SettingItem>();
- settingItem = new SettingItem(4, SettingItem.TEXT);
- settingItem.setText(getString(R.string.account_setting_share));
- settingItem.setListener(this);
- listItems.add(settingItem);
- settingItem = new SettingItem(5, SettingItem.IMAGE);
- settingItem.setText(getString(R.string.account_setting_feedback));
- settingItem.setListener(this);
- settingItem.setImage(R.drawable.setting_more);
- listItems.add(settingItem);
- settingItem = new SettingItem(6, SettingItem.IMAGE);
- settingItem.setText("ccc");
- settingItem.setListener(this);
- settingItem.setImage(R.drawable.setting_more);
- listItems.add(settingItem);
- item.put("", listItems);
-
- listView.mSettingList.add(item);
-
-
- item = new HashMap<String, List<SettingItem>>();
- listItems = new ArrayList<SettingItem>();
- settingItem = new SettingItem(7, SettingItem.TEXT);
- settingItem.setText(getString(R.string.account_setting_share));
- settingItem.setListener(this);
- listItems.add(settingItem);
- settingItem = new SettingItem(8, SettingItem.IMAGE);
- settingItem.setText(getString(R.string.account_setting_feedback));
- settingItem.setListener(this);
- settingItem.setImage(R.drawable.setting_more);
- listItems.add(settingItem);
- settingItem = new SettingItem(9, SettingItem.IMAGE);
- settingItem.setText("qweqwe");
- settingItem.setListener(this);
- settingItem.setImage(R.drawable.setting_more);
- listItems.add(settingItem);
- item.put("", listItems);
-
- listView.mSettingList.add(item);
- }