listview条目用状态选择器没反应
生活随笔
收集整理的這篇文章主要介紹了
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;@Overridepublic 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;}@Overridepublic void initData() {}// 給側邊欄設置數據public void setMenuData(ArrayList<NewsMenuData> data) {mCurrentPos = 0;//當前選中的位置歸零// 更新頁面mNewsMenuData = data;mAdapter = new LeftMenuAdapter();lvList.setAdapter(mAdapter); lvList.setOnItemClickListener(new OnItemClickListener() {@Overridepublic 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;// 獲取ContentFragmentContentFragment fragment = mainUI.getContentFragment();// 獲取NewsCenterPagerNewsCenterPager newsCenterPager = fragment.getNewsCenterPager();// 修改新聞中心的FrameLayout的布局 newsCenterPager.setCurrentDetailPager(position);}/*** 打開或者關閉側邊欄*/protected void toggle() {MainActivity mainUI = (MainActivity) mActivity;SlidingMenu slidingMenu = mainUI.getSlidingMenu();slidingMenu.toggle();// 如果當前狀態是開, 調用后就關; 反之亦然 }class LeftMenuAdapter extends BaseAdapter {@Overridepublic int getCount() {return mNewsMenuData.size();}@Overridepublic NewsMenuData getItem(int position) {return mNewsMenuData.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;}}}?
轉載于:https://www.cnblogs.com/johnsonwei/p/5895217.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的listview条目用状态选择器没反应的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器缓存机制
- 下一篇: SignalR系列续集[系列8:Sign