2015-06-25 4 views
3

Я пытаюсь изменить textColor в своем NavigationDrawer, когда элемент выбран. Я использую RecyclerView в качестве макета для прокрутки. Это основано на учебнике:NavigationDrawer RecyclerView выбранные элементы меняют цвет

http://www.androidhive.info/2015/04/android-getting-started-with-material-design/

Любой может предложить Решение

Заранее спасибо.

+0

Так что вы хотите изменить TextColor пункта [View] при выборе ?. Это то, что вы хотите? –

+0

Спасибо за быстрый ответ Я хочу изменить цвет текста. Также, если это возможно, вам нужно будет изменить этот макет направляющей ящика навигации. – AngelJanniee

+0

установить прослушиватель кликов в текстовое изображение в адаптере. Тогда вам, возможно, придется написать интерфейс, чтобы ваша деятельность знала, что вы нажали на текст. Измените цвет вашего текстового вида в методе вашего интерфейса, а затем вызовите notifydatasetchanged. – user765

ответ

8

Определить статический Int в классе NavigationDrawerAdapter представлять выбранный элемент

В NavigationDrawerAdapter.java

public class NavigationDrawerAdapter extends RecyclerView.Adapter<NavigationDrawerAdapter.MyViewHolder> { 
    public static int selected_item = 0; 
    ... 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     NavDrawerItem current = data.get(position); 
     holder.title.setText(current.getTitle()); 
     if(position == selected_item) 
     { 
      holder.title.setTextColor(Color.RED); 
     } 
     else 
     { 
      holder.title.setTextColor(Color.BLACK); 
     } 
    } 

    ... 

} 

В FragmentDrawer.java

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    ... 
    recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() { 
     @Override 
     public void onClick(View view, int position) { 

      NavigationDrawerAdapter.selected_item = position; 
      recyclerView.getAdapter().notifyDataSetChanged(); 
      drawerListener.onDrawerItemSelected(view, position); 
      mDrawerLayout.closeDrawer(containerView); 
     } 

     ... 
    })); 

    ... 
} 
+0

Теперь он работает отлично, спасибо @charagjn. , но здесь я могу видеть изменения, когда возвращаю ползунок, я не мог видеть, когда я нажимаю на этот предмет. Можете ли вы предложить идею? Отредактировано – AngelJanniee

+1

отредактировано, положите ящик с ящиком после вызова notifyDataSetChanged() – chiragjn

+0

Большое спасибо :) –

1

Я выяснил, как изменить цвет текста, а также цвет всего изображения.

Я обновил свой FragmentDrawer.java

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflating view layout 
    View layout = inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 
    recyclerView = (RecyclerView) layout.findViewById(R.id.drawerList); 

    adapter = new NavigationDrawerAdapter(getActivity(), getData()); 
    recyclerView.setAdapter(adapter); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
    recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() { 
     @Override 
     public void onClick(View view, int position) { 
      view.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 
      ((TextView) view.findViewById(R.id.title)).setTextColor(getResources().getColor(R.color.material_blue_grey_800)); 
      drawerListener.onDrawerItemSelected(view, position); 
      mDrawerLayout.closeDrawer(containerView); 
     } 

     @Override 
     public void onLongClick(View view, int position) { 

     } 
    })); 

    return layout; 
} 

То, что я в основном сделал это, в методе OnClick() из TouchListener.

view.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 

Это изменит цвет фона зрения

Точно так Я ссылку на представление, я мог бы получить ссылку на TextView, который используется внутри макета полки ,

((TextView) view.findViewById(R.id.title)).setTextColor(getResources().getColor(R.color.material_blue_grey_800)); 
+2

Да, его изменяющиеся, но другие элементы должны быть предыдущего цвета. Если я нажму на элементы, то он будет меняться один за другим тот же цвет, позиционированный элемент только нужно изменить и как справиться с этим? – AngelJanniee

0

Вы можете сделать это:

public class MainActivity extends AppCompatActivity { 

    ....... 

    adapter.setOnItemClickLister(new MenuAdapter.OnItemSelecteListener() { 

     View selectedView; 

     @Override 
     public void onItemSelected(View v, int position) { 

      if(selectedView != null) 
       selectedView.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.defaultColor)); 

      v.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.orange)); 

      selectedView = v; 
     } 
    }); 


} 
Смежные вопросы