【问题标题】:NavigationDrawer RecyclerView selected items change colorNavigationDrawer RecyclerView 选中的项目改变颜色
【发布时间】:2015-06-25 08:51:50
【问题描述】:

当项目被选中时,我正在尝试更改 NavigationDrawer 中的 textColor。我使用 RecyclerView 作为我的滑动布局。这是基于教程:

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

任何人都可以提出解决方案

提前致谢。

【问题讨论】:

  • 所以你想在选中时更改项目[View]的textColor?。是你想要的吗?
  • 感谢您的快速响应我想更改文本颜色,如果可能还需要更改导航抽屉行布局
  • 在适配器中为您的文本视图设置一个点击监听器。然后您可能必须编写一个界面,以便您的活动知道您单击了文本视图。在界面的方法中更改文本视图的颜色,然后调用 notifydatasetchanged。
  • 如果我为 Textview 设置监听器,什么都不会发生,这是我在这里添加的 textview.setTextColor(context.getResources().getColor(android.R.color.holo_green_light)); textview.setTypeface(Typeface.DEFAULT_BOLD); notifyDataSetChanged();你能给我解释一下吗?

标签: android navigation-drawer


【解决方案1】:

在 NavigationDrawerAdapter 类中定义一个静态 int 来表示选中项

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

        ...
    }));

    ...
}

【讨论】:

  • 它现在工作正常,谢谢@charagjn。但是在这里我可以看到当我返回滑块时的变化,当我点击那个项目时我看不到,你能提出这个想法吗?谢谢
  • 已编辑,调用 notifyDataSetChanged() 后关闭抽屉
【解决方案2】:

我已经弄清楚了如何更改文本颜色以及整个视图的颜色。

我已经更新了你的 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;
}

我基本上所做的是,在TouchListener 的onClick() 方法中。

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

这将改变视图的背景颜色

同样,由于我已经引用了视图,我可以引用在 Drawer 布局内部使用的 TextView

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

【讨论】:

  • 是的,它的变化,但其他项目应该是以前的颜色也不是,如果我点击项目,那么它会一个一个地改变为相同的颜色,定位的项目只需要改变也不如何处理?
【解决方案3】:

你可以这样做:

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


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多