【发布时间】:2020-07-27 13:22:24
【问题描述】:
我是 Android 开发的菜鸟,今天我正在尝试构建一个自定义侧边栏。 我使用了一个带有 2 个 imageViews 的视图,并且我试图用多个图标多次充气它们,我使用自定义类来做到这一点。这是查看代码: Side_bar.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:src="@drawable/icn"
android:layout_height="48dp"
android:tint="#afafaf"
android:id="@+id/menu_icon"
/>
<ImageView
android:layout_width="8dp"
android:layout_height="8dp"
android:id="@+id/menu_selector"
android:src="@drawable/selector"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
这是我的自定义类:
public class Item
{
private int icon, code;
private boolean isSelected;
public Item(int icon, int code)
{
this.icon = icon;
this.code = code;
}
public int getIcon()
{
return icon;
}
public void setIcon(int icon)
{
this.icon = icon;
}
public int getCode()
{
return code;
}
public void setCode(int code)
{
this.code = code;
}
public boolean isSelected()
{
return isSelected;
}
public void setSelected(boolean selected)
{
isSelected = selected;
}
public Item(int icon, int code, boolean isSelected)
{
this.icon = icon;
this.code = code;
this.isSelected = isSelected;
}
}
我使用此代码为此类分配数据:
public class MenuUtils
{
public static final int HOME = 0, EDU = 1, CONTACT = 2, PROJECTS = 3;
public static List<Item> getList()
{
List<Item> list = new ArrayList<>();
list.add(new Item(R.drawable.icn1, HOME, true));
list.add(new Item(R.drawable.icn2, EDU, true));
list.add(new Item(R.drawable.icn3, CONTACT, true));
list.add(new Item(R.drawable.icn4, PROJECTS, true));
return list;
}
}
这是我的适配器的代码:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>
{
List<Item> list;
public MyAdapter(List<Item> list)
{
this.list = list;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.side_bar, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position)
{
holder.icon.setImageResource(list.get(position).getIcon());
if (list.get(position).isSelected()) holder.selected.setVisibility(View.VISIBLE);
else holder.selected.setVisibility(View.INVISIBLE);
}
@Override
public int getItemCount()
{
Log.i("List Size", list.toString());
return list.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
ImageView icon, selected;
public MyViewHolder(@NonNull View itemView)
{
super(itemView);
icon = (ImageView) itemView.findViewById(R.id.menu_icon);
selected = (ImageView) itemView.findViewById(R.id.menu_selector);
}
}
}
侧边栏设置方法:
private void setMenu()
{
menu = findViewById(R.id.menu_holder);
List<Item> items = MenuUtils.getList();
MyAdapter adapter = new MyAdapter(items);
menu.setLayoutManager(new LinearLayoutManager(this));
menu.setAdapter(adapter);
}
在记录时,我看到该列表有 4 个数据项,但是当膨胀时,只出现一个。 为什么这样? 请帮忙。
【问题讨论】:
标签: android android-layout android-recyclerview