2015-01-21 3 views
2

Я пытаюсь изменить textColor в моем NavigationDrawer, когда элемент выбран. Я использую RecyclerView в качестве макета для прокрутки. Это основано на учебнике: http://www.android4devs.com/2014/12/how-to-make-material-design-navigation-drawer.html. это то, что я пытаюсь сделать: NavigationDrawerStyle Это основной макет:NavigationDrawer RecyclerView изменение выбранного стиля элемента

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <android.support.v4.widget.DrawerLayout 
      android:id="@+id/DrawerLayout" 
      android:elevation="7sp" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
     <FrameLayout 
       android:id="@+id/content_frame" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 
     <android.support.v7.widget.RecyclerView 
       android:id="@+id/RecyclerView" 
       android:layout_width="320dp" 
       android:background="#ffffff" 
       android:layout_height="match_parent" 
       android:layout_gravity="right" 
       android:scrollbars="vertical"> 
     </android.support.v7.widget.RecyclerView> 
    </android.support.v4.widget.DrawerLayout> 
</RelativeLayout> 

и list_item:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="wrap_content" 
       android:paddingTop="8dp" 
       android:paddingBottom="8dp" 
       android:layout_height="wrap_content" 
       android:background="#ffffff" 
       android:orientation="horizontal"> 

    <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/rowIcon" 
      android:paddingStart="16dp" 
      android:src="@drawable/ic_launcher"/> 
    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:paddingStart="12dp" 
      android:background="?android:attr/selectableItemBackground" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Medium Text" 
      android:id="@+id/rowText" /> 
</LinearLayout> 

Как я могу сказать ему, чтобы изменить цвет, когда он выбран?

+0

У меня возник вопрос: вам действительно нужно использовать RecyclerView? учитывая, что у вас есть 10 ems в max? в навигационном ящике? – Droidekas

+0

Да, я поддержал ListView – Haim127

ответ

1

Во-первых, вам нужно добавить переменную, чтобы запомнить выбранную позицию. Затем добавьте прослушиватель кликов в свой список товаров. Когда элемент списка нажат, проверьте, совпадает ли позиция с предыдущей выбранной позицией, если нет, то измените стиль и сбросьте стиль предыдущего выбранного элемента.

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

View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row,parent,false); 
ViewHolder vhItem = new ViewHolder(v,viewType); 
TextView textView = (TextView) vhItem.findViewById(R.id.rowText); 
textView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        //change style here 
       } 
      });); 
+0

Ну, на самом деле это работает, за исключением довольно механического решения, а в ListView вы можете легко установить стиль фона item_template, когда он выбран – Raffaeu

0

Вам необходимо переопределить метод OnClick в классе адаптера, который простирается от RecyclerView.Adapter <> внутри метода onBindViewHolder, как показано ниже код и примените свою логику для изменения цвета в соответствии с выбранным позиционным позицией

public void onBindViewHolder(final Quizviewholder holder, int position) { 
      holder.quizname.setText(quizList.get(position).name); 
      holder.desc.setText(quizList.get(position).desc); 
      holder.time.setText(quizList.get(position).quttime); 
      holder.noofque.setText(quizList.get(position).qutonsno); 
      holder.setClickListener(new ItemClickListener() { 
       @Override 
       public void onClick(View view, int position, boolean isLongClick) { 
        if (isLongClick) { 
         Toast.makeText(mContext, "Rj0078" + position + " - " + mList[position] + " (Long click)", Toast.LENGTH_SHORT).show(); 
        } else { 
         Toast.makeText(mContext, "Rj0078" + position + " - " + holder.time.getText(), Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 
    } 
Смежные вопросы