NavigationDrawer RecyclerView更改选定的项目样式

时间:2015-01-21 13:23:58

标签: android navigation-drawer android-recyclerview

当我选择项目时,我正在尝试更改NavigationDrawer中的textColor。我使用RecyclerView作为我的滑动布局。这基于教程:http://www.android4devs.com/2014/12/how-to-make-material-design-navigation-drawer.html。 这就是我想要做的: NavigationDrawerStyle 这是主要布局:

<?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>

如何在选择颜色时告诉他更改颜色?

2 个答案:

答案 0 :(得分: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
                }
            }););

答案 1 :(得分:0)

您需要覆盖从RecyclerView.Adapter&lt;&gt;扩展的适配器类中的onClick方法在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();
                    }
                }
            });
    }