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; } } }