首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

ExpandableListView小图标轮换

2012-08-27 
ExpandableListView小图标替换ExpandableListView的小图标有个状态,一个是不点击的情况,一个是点击后展开

ExpandableListView小图标替换
ExpandableListView的小图标有个状态,一个是不点击的情况,一个是点击后展开的情况,用xml配置如下:

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">       <item android:state_expanded="true" android:drawable="@drawable/narrow_select" />       <item android:drawable="@drawable/narrow" /></selector>

Java的代码如下:
ExpandableListView listView = getExpandableListView();listView.setGroupIndicator(this.getResources().getDrawable(R.drawable.group_icon_selector));

注意:不知道为什么,使用自定义的GroupIndicator会发生图片被拉伸的现象,为了解决这个问题需要定义一个长度为groups.length的boolean数组:
private boolean[] isOpen=new boolean[groups.length];

然后重写OnGroupCollapseListener和OnGroupExpandListener用于修改当前group的状态:
expandableListView.setOnGroupCollapseListener(onGroupCollapseListener);expandableListView.setOnGroupExpandListener(onGroupExpandListener);expandableListView.setGroupIndicator(null);//不要自带的了!!!OnGroupCollapseListener onGroupCollapseListener=new OnGroupCollapseListener(){@Overridepublic void onGroupCollapse(int groupPosition) {// TODO Auto-generated method stubisOpen[groupPosition]=false;}};OnGroupExpandListener onGroupExpandListener=new OnGroupExpandListener(){@Overridepublic void onGroupExpand(int groupPosition) {// TODO Auto-generated method stubisOpen[groupPosition]=true;}};

最后在getGroupView()中应用,代码片段如下:
@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {// TODO Auto-generated method stubTextView textView=null;if(convertView==null){textView=new TextView(mContext);AbsListView.LayoutParams lp = new AbsListView.LayoutParams(                      ViewGroup.LayoutParams.FILL_PARENT, 50);              textView.setLayoutParams(lp);            textView.setGravity(Gravity.CENTER);            textView.setPadding(10, 0, 0, 0);            textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16.0f);            textView.setTextColor(0xFFC6B39C);            textView.setBackgroundResource(R.drawable.bg_tv);//bg_tv_expand            convertView=textView;}else{textView=(TextView)convertView;}//为了处理图标被拉伸的问题!这里采用偷懒的办法让textView傍边产生一个图标,如果GroupView只是一个TextView的话,推荐这样做!if(isOpen[groupPosition]){Drawable leftDrawable= resources.getDrawable(R.drawable.arrow_down_on);            leftDrawable.setBounds(0, 0, leftDrawable.getMinimumWidth(), leftDrawable.getMinimumHeight());            textView.setCompoundDrawables(leftDrawable, null, null, null);}else{Drawable leftDrawable= resources.getDrawable(R.drawable.arrow_right_off);leftDrawable.setBounds(0, 0, leftDrawable.getMinimumWidth(), leftDrawable.getMinimumHeight());textView.setCompoundDrawables(leftDrawable, null, null, null);}textView.setText(((Market)getGroup(groupPosition)).market);            return textView;}


over!

Android版手风琴(ExpandableListView)

创新源于模仿之四:增强的ExpandableListView

android api里的例子:

import android.app.ExpandableListActivity;import android.os.Bundle;import android.view.ContextMenu;import android.view.Gravity;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.view.ContextMenu.ContextMenuInfo;import android.widget.AbsListView;import android.widget.BaseExpandableListAdapter;import android.widget.ExpandableListAdapter;import android.widget.ExpandableListView;import android.widget.TextView;import android.widget.Toast;import android.widget.ExpandableListView.ExpandableListContextMenuInfo;import com.example.android.apis.R;/** * Demonstrates expandable lists using a custom {@link ExpandableListAdapter} * from {@link BaseExpandableListAdapter}. */public class ExpandableList1 extends ExpandableListActivity {    ExpandableListAdapter mAdapter;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // Set up our adapter        mAdapter = new MyExpandableListAdapter();        setListAdapter(mAdapter);        registerForContextMenu(getExpandableListView());    }    @Override    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {        menu.setHeaderTitle("Sample menu");        menu.add(0, 0, 0, R.string.expandable_list_sample_action);    }        @Override    public boolean onContextItemSelected(MenuItem item) {        ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();        String title = ((TextView) info.targetView).getText().toString();                int type = ExpandableListView.getPackedPositionType(info.packedPosition);        if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {            int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);             int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);             Toast.makeText(this, title + ": Child " + childPos + " clicked in group " + groupPos,                    Toast.LENGTH_SHORT).show();            return true;        } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {            int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);             Toast.makeText(this, title + ": Group " + groupPos + " clicked", Toast.LENGTH_SHORT).show();            return true;        }                return false;    }    /**     * A simple adapter which maintains an ArrayList of photo resource Ids.      * Each photo is displayed as an image. This adapter supports clearing the     * list of photos and adding a new photo.     *     */    public class MyExpandableListAdapter extends BaseExpandableListAdapter {        // Sample data set.  children[i] contains the children (String[]) for groups[i].        private String[] groups = { "People Names", "Dog Names", "Cat Names", "Fish Names" };        private String[][] children = {                { "Arnold", "Barry", "Chuck", "David" },                { "Ace", "Bandit", "Cha-Cha", "Deuce" },                { "Fluffy", "Snuggles" },                { "Goldy", "Bubbles" }        };                public Object getChild(int groupPosition, int childPosition) {            return children[groupPosition][childPosition];        }        public long getChildId(int groupPosition, int childPosition) {            return childPosition;        }        public int getChildrenCount(int groupPosition) {            return children[groupPosition].length;        }        public TextView getGenericView() {            // Layout parameters for the ExpandableListView            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(                    ViewGroup.LayoutParams.MATCH_PARENT, 64);            TextView textView = new TextView(ExpandableList1.this);            textView.setLayoutParams(lp);            // Center the text vertically            textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);            // Set the text starting position            textView.setPadding(36, 0, 0, 0);            return textView;        }                public View getChildView(int groupPosition, int childPosition, boolean isLastChild,                View convertView, ViewGroup parent) {            TextView textView = getGenericView();            textView.setText(getChild(groupPosition, childPosition).toString());            return textView;        }        public Object getGroup(int groupPosition) {            return groups[groupPosition];        }        public int getGroupCount() {            return groups.length;        }        public long getGroupId(int groupPosition) {            return groupPosition;        }        public View getGroupView(int groupPosition, boolean isExpanded, View convertView,                ViewGroup parent) {            TextView textView = getGenericView();            textView.setText(getGroup(groupPosition).toString());            return textView;        }        public boolean isChildSelectable(int groupPosition, int childPosition) {            return true;        }        public boolean hasStableIds() {            return true;        }    }}

热点排行