我需要像这样创建recyclerView:
我创建了我的recyclerView,完成了组,添加了分隔线和图标,但结果不正确。所以我得到了这个:
这不是我想要的结果。那么让我向您展示源代码。
public class Supporters_item {
private int image;
private String fullName;
private String profession;
public Supporters_item(int image, String fullName, String profession) {
this.image = image;
this.fullName = fullName;
this.profession = profession;
}
public int getImage() {
return image;
}
public String getFullName() {
return fullName;
}
public String getProfession() {
return profession;
}}
这是项目部分。我认为这里没有必要。
现在这是适配器。
public class SupportersAdapter extends RecyclerView.Adapter<SupportersAdapter.MyViewHolder> {
Context context;
List<Supporters_item> list = new ArrayList<>();
public SupportersAdapter(Context context, List<Supporters_item> list) {
this.context = context;
this.list = list;
}
@Override
public SupportersAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
v = LayoutInflater.from(context).inflate(R.layout.supporters_view_item, parent, false);
MyViewHolder holder = new MyViewHolder(v);
return holder;
}
@Override
public void onBindViewHolder(SupportersAdapter.MyViewHolder holder, int position) {
holder.imageView.setImageResource(list.get(position).getImage());
holder.fullName.setText(list.get(position).getFullName());
holder.profession.setText(list.get(position).getProfession());
if (list.get(position).getProfession().equals("Actress")) {
holder.icon.setImageResource(R.drawable.medical);
}
if (list.get(position).getProfession().equals("Builder")) {
holder.icon.setImageResource(R.drawable.builderkey);
}
if (list.get(position).getProfession().equals("Designer")) {
holder.icon.setImageResource(R.drawable.shopping);
}
if (list.get(position).getProfession().equals("Programmer")) {
holder.icon.setImageResource(R.drawable.education);
}
if (position == 0) {
holder.icon.setVisibility(View.VISIBLE);
}
if (position >0) {
if (!list.get(position).getProfession().substring(0, 1).equals
(list.get(position - 1).getProfession().substring(0, 1))) {
holder.view.setVisibility(View.VISIBLE);
holder.icon.setVisibility(View.VISIBLE);
}
}
}
@Override
public int getItemCount() {
return list.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
ImageView imageView, icon;
TextView fullName, profession;
View view;
public MyViewHolder(View itemView) {
super(itemView);
imageView = (ImageView) itemView.findViewById(R.id.support_picture);
fullName = (TextView) itemView.findViewById(R.id.fName);
profession = (TextView) itemView.findViewById(R.id.profession);
icon = (ImageView) itemView.findViewById(R.id.icon);
view = itemView.findViewById(R.id.bottomLine);
}
}}
我在 onBindViewHolder() 中完成了组部分,所以请注意,我没有得到我想要的结果,我想要得到图像结果。
这是 MainActivity 类。
public class MainActivity extends AppCompatActivity
implements FragmentChangeListener, TabLayoutLocationInterface {
SlidePageTabsMainFragment slidePageTabsMainFragment;
MainFragment mainFragment;
FragmentLanguage fragmentLanguage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ApiClient.initializeInstance("https://supportop.eu-gb.mybluemix.net/");
slidePageTabsMainFragment = new SlidePageTabsMainFragment();
mainFragment = new MainFragment();
fragmentLanguage = new FragmentLanguage();
this.replaceFragment(slidePageTabsMainFragment, true);
SharedPreferencesManager.init(this);
}
@Override
public void replaceFragment(BaseFragment fragment, Boolean isAddToBackStack) {
String backStateName = fragment.getClass().getName();
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.main_fragment_container, fragment, fragment.toString());
transaction.addToBackStack(backStateName);
transaction.commit();
}
@Override
public int getTabLayoutLocation() {
SlidePageTabsMainFragment slidePageTabsMainFragment = (SlidePageTabsMainFragment)
getFragmentManager().findFragmentByTag("SlidePageTabsMainFragment");
return slidePageTabsMainFragment.getTabLayoutLocation();
}
//fragments back press part
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() == 1) {
finish();
} else if (getFragmentManager().getBackStackEntryCount() >= 5) {
if (fragmentLanguage != null) {
getFragmentManager().popBackStack(fragmentLanguage.getClass().getName(),
FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
} else {
super.onBackPressed();
}
}}
最佳答案
您正在为单个 ViewHolder
但 holder 的一个条件 block 中设置
和 holder.view
和 holder.icon
的可见性。 viewholder.icon
可见性将在 2 个连续的 ViewHolder
之间发生变化。
示例:如果行索引 3 与行索引 4 不同,则行索引 3 的 holder.view
将为 VISIABLE
和 行索引 4 的holder.icon
将是 VISIABLE
。因此,您无法在一个条件 block 中更改它,因为您一次会获得一个 ViewHolder
。
将其转换为2个检查 block
最初将 INVISIABLE
/GONE
设置为 RecycleView
将重用 View
holder.view.setVisibility(View.GONE);
holder.icon.setVisibility(View.INVISIBLE);
对于底部 View (holder.view
):
if (position +1 < getItemCount() ) {
if (!list.get(position).getProfession().substring(0, 1).equals
(list.get(position + 1).getProfession().substring(0, 1))) {
holder.view.setVisibility(View.VISIBLE);
}
}
对于图标 View (holder.icon
):
if (position >0) {
if (!list.get(position).getProfession().substring(0, 1).equals
(list.get(position - 1).getProfession().substring(0, 1))) {
holder.icon.setVisibility(View.VISIBLE);
}
}
另外添加保留此位置,因为位置 0 将显示图标
if (position == 0) {
holder.icon.setVisibility(View.VISIBLE);
}
如果我正确地理解了你的问题,我认为这会解决你的问题。
关于java - 如何对 recyclerView 进行分组,在组之间添加分隔线并为每个组添加一个图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48881933/