zoukankan      html  css  js  c++  java
  • listview条目用状态选择器没反应

    button和imagebutton天生具有“可点击(click)”、“可按下(press)”的特性,radiobutton具有“可勾选(check)”的特性,但是listview的条目只有“可按下(press)”的特性,所以下面代码不起作用:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:drawable="@drawable/menu_arr_select" android:state_selected="true"/>
        <item android:drawable="@drawable/menu_arr_select" android:state_checked="true"/>
        <item android:drawable="@drawable/menu_arr_normal" />
    
    </selector>

    listview的条目有enabled 特性,所以状态选择器这样写:

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

     然后代码还要做些处理(红色代码部分就是需要做的处理):

    public class LeftMenuFragment extends BaseFragment {
    
        @ViewInject(R.id.lv_list)
        private ListView lvList;
    
        private ArrayList<NewsMenuData> mNewsMenuData;// 侧边栏网络数据对象
    
        private int mCurrentPos;// 当前被选中的item的位置
    
        private LeftMenuAdapter mAdapter;
    
        @Override
        public View initView() {
            View view = View.inflate(mActivity, R.layout.fragment_left_menu, null);
            // lvList = (ListView) view.findViewById(R.id.lv_list);
            ViewUtils.inject(this, view);// 注入view和事件
            return view;
        }
    
        @Override
        public void initData() {
        }
    
        // 给侧边栏设置数据
        public void setMenuData(ArrayList<NewsMenuData> data) {
            mCurrentPos = 0;//当前选中的位置归零
            
            // 更新页面
            mNewsMenuData = data;
    
            mAdapter = new LeftMenuAdapter();
            lvList.setAdapter(mAdapter);
    
            lvList.setOnItemClickListener(new OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    mCurrentPos = position;// 更新当前被选中的位置
                    mAdapter.notifyDataSetChanged();// 刷新listview
    
                    // 收起侧边栏
                    toggle();
    
                    // 侧边栏点击之后, 要修改新闻中心的FrameLayout中的内容
                    setCurrentDetailPager(position);
                }
            });
        }
    
        /**
         * 设置当前菜单详情页
         * 
         * @param position
         */
        protected void setCurrentDetailPager(int position) {
            // 获取新闻中心的对象
            MainActivity mainUI = (MainActivity) mActivity;
            // 获取ContentFragment
            ContentFragment fragment = mainUI.getContentFragment();
            // 获取NewsCenterPager
            NewsCenterPager newsCenterPager = fragment.getNewsCenterPager();
            // 修改新闻中心的FrameLayout的布局
            newsCenterPager.setCurrentDetailPager(position);
        }
    
        /**
         * 打开或者关闭侧边栏
         */
        protected void toggle() {
            MainActivity mainUI = (MainActivity) mActivity;
            SlidingMenu slidingMenu = mainUI.getSlidingMenu();
            slidingMenu.toggle();// 如果当前状态是开, 调用后就关; 反之亦然
        }
    
        class LeftMenuAdapter extends BaseAdapter {
    
            @Override
            public int getCount() {
                return mNewsMenuData.size();
            }
    
            @Override
            public NewsMenuData getItem(int position) {
                return mNewsMenuData.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View view = View.inflate(mActivity, R.layout.list_item_left_menu,
                        null);
                TextView tvMenu = (TextView) view.findViewById(R.id.tv_menu);
    
                NewsMenuData item = getItem(position);
                tvMenu.setText(item.title);
    
                if (position == mCurrentPos) {
                    // 被选中
                    tvMenu.setEnabled(true);// 文字变为红色
                } else {
                    // 未选中
                    tvMenu.setEnabled(false);// 文字变为白色
                }
    
                return view;
            }
    
        }
    
    }
  • 相关阅读:
    MySQL--06
    MySQL--05
    MySQL--04
    MySQL--03
    MySQL--02
    MySQL--01
    JavaScript3
    JavaScript2
    四大函数式接口 函数型接口 断定型接口 消费型接口 供给型接口 流式计算
    课后作业-阅读任务-阅读提问-4
  • 原文地址:https://www.cnblogs.com/johnsonwei/p/5895217.html
Copyright © 2011-2022 走看看