Выбранный элемент в навигационном ящике

Я применил ящик навигации в своем приложении ( http://developer.android.com/training/implementing-navigation/nav-drawer.html ).

Как я могу изменить отображение фактически выбранного элемента? Я хочу, чтобы выделенный элемент был полужирным и имел другой цвет.

В официальном примере они используют «setItemChecked», но как я могу изменить аспект одного элемента? Метод setOnItemSelectedListener не работает.

Пока что я делаю этот кусок кода, когда открываю фрагмент:

for (int i = 0; i < mDrawerList.getChildCount(); i++){ TextView t = (TextView) mDrawerList.getChildAt(i); if(i == fragmentPosition) t.setTextColor(getResources().getColor(R.color.blue)); else t.setTextColor(getResources().getColor(R.color.black)); } 

Он работает, но при запуске приложения ни один элемент не выбран, и я не могу установить какой-либо элемент, потому что listview еще не создан (он создается, когда мы открываем его в первый раз, я думаю).

Я попытался создать селектор, но не знаю, как правильно установить разные атрибуты (элемент отмечен, выбранный элемент, щелкнул элемент?), Искал документы, но я не понимаю.

Спасибо за любую помощь, которую вы можете предоставить!

Я бы сделал это в адаптере.

 mAdapter.setSelectedItem(position); public View getView(...) { ... if (position == mSelectedItem) { text.setTypeface(...); text.setBackgroundColor(...); } else { text.setTypeface(...); text.setBackgroundColor(...); } } 

И если вам не нужно устанавливать шрифт, вы можете использовать селектор с

 setTextColor(@drawable/my_selector). 

Или поместите его в свой XML-файл с помощью TextView

 android:textColor="@drawable/my_selector" 

Вот мое решение для изменения цвета и шрифта выбранного элемента в навигационном ящике …

 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { setNavDrawerItemNormal(); TextView txtview = ((TextView) view.findViewById(R.id.txtNav)); txtview.setTypeface(null, Typeface.BOLD); txtview.setTextColor(R.color.Red); } public void setNavDrawerItemNormal() { for (int i=0; i< mDrawerListView.getChildCount(); i++) { View v = mDrawerListView.getChildAt(i); TextView txtview = ((TextView) v.findViewById(R.id.txtNav)); Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Light.ttf"); txtview.setTypeface(font); txtview.setTextColor(R.color.Red); } } 

И чтобы выделить первый элемент в навигационном ящике при инициализации приложения, я сделал это в интерфейсе списка get view …

 @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.navdrawer_item, parent, false); TextView textView = (TextView) rowView.findViewById(R.id.txtNav); textView.setText(values[position]); if (position == 0) { textView.setTypeface(null, Typeface.BOLD); textView.setTextColor(R.color.Red); } return rowView; } 

Итак, здесь я проверил, если позиция элемента равна 0 (что означает его первый элемент), затем сделайте его полужирным. Все это отлично работает для меня! ~