gpt4 book ai didi

android - 使用 recyclerview Material 设计样式化抽屉导航

转载 作者:太空狗 更新时间:2023-10-29 16:35:26 24 4
gpt4 key购买 nike

所以我在我的 Drawerlayout 中使用 RecyclerView 遵循 ma​​terial design

我想要的是当我按下 RecyclerView 中的特定项目时,它的背景颜色和文本颜色将以我想要的方式突出显示。但是,当我单击每个项目时,它只会在那个特定时刻突出显示,并且在抽屉关闭后不会保留其状态。那么我如何创建一个像 youtube 抽屉导航这样的选择器,它在被选中时保留其高亮属性。谢谢。

所以这是我在 RecyclerView 中的每个项目的布局:

RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:background="@drawable/nav_drawer_row_selector"
>


<ImageView
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_centerVertical="true"
android:id="@+id/navIcon" />

<TextView
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15dp"
android:textStyle="bold"
android:layout_marginLeft="72dp"
android:text="Sample Text"
/>

</RelativeLayout>

这是我的选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/primaryColorDark"
android:state_pressed="true" />
<item android:drawable="@color/primaryColorDark"
android:state_activated="true" />
<item android:drawable="@android:color/transparent"
android:activated="false" />
</selector>

最佳答案

这就是我解决问题的方法。我在 RecyclerView.Adapter 的 onBindViewHolder 上执行此操作。

这是我的整个适配器类:

  public class NavDrawerAdapter extends RecyclerView.Adapter<NavDrawerAdapter.MyViewHolder>{

List<NavDrawerItem> data = Collections.emptyList();
List<MyViewHolder> holders = new ArrayList<MyViewHolder>();
private LayoutInflater inflater;
private Context context;

public NavDrawerAdapter(Context context, List<NavDrawerItem> data) {
this.context = context;
inflater = LayoutInflater.from(context);
this.data = data;
}

public void delete(int position) {
data.remove(position);
notifyItemRemoved(position);
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.nav_drawer_row, parent, false);
MyViewHolder holder = new MyViewHolder(view);
//storing holders instance to an array
holders.add(holder);
return holder;
}

//Set the contents of different views of the row.
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final NavDrawerItem current = data.get(position);
holder.title.setText(current.getTitle());
holder.img.setImageResource(current.getIcon());
holder.root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(current.isShowNotify()){
current.setShowNotify(false);
holder.root.setBackgroundColor(context.getResources().getColor(R.color.white));
}else{
current.setShowNotify(true);
holder.root.setBackgroundColor(context.getResources().getColor(R.color.primaryColor));
//looping through MyViewHolder instances and removing the background color if not selected
for(int i= 0; i < holders.size(); i++){
if(i != position){
holders.get(i).root.setBackgroundColor(context.getResources().getColor(R.color.white));
}
}
}
}
});
//Log.d("JC", "onBindViewHolder() position : " + position);
}

@Override
public int getItemCount() {
return data.size();
}

class MyViewHolder extends RecyclerView.ViewHolder {
TextView title;
ImageView img;
RelativeLayout root;

public MyViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title);
img = (ImageView) itemView.findViewById(R.id.navIcon);
root = (RelativeLayout) itemView.findViewById(R.id.root);
}

}
}

希望这会对某人有所帮助。

关于android - 使用 recyclerview Material 设计样式化抽屉导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30190633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com