如何在Adapter类中使用recyclerview项ID

时间:2018-03-02 12:37:33

标签: android sqlite android-recyclerview

过去三天我试图解决这个问题,但无济于事。我正在从连接在一起的两个数据库表中检索数据(表名是"类"和"部分")。问题由下面的图片描述。

enter image description here

enter image description here

每个学校班级(一年级,二年级等)应该为每个被点击的班级显示部分(一年级1A级,二级二级2A等)。但是从图像中,所有类都显示相同的(类部分),而不管被点击的类。

问题

如何让每个部分显示各自的课程? 非常感谢示例代码。如果有办法获取recyclerViewItem的Id并将其与类表中类名的Id匹配,我将非常感谢代码示例。

这是我在Adapter类的onBindViewHolder()中所做的。我认为错误来自这里

@Override
public void onBindViewHolder(final ClassSectionOnSetupRecyclerAdapter.ViewHolderCSOS holder, final int position) {
    holder.textView_classname_sections.setText(listClassesCSOS.get(position).getClasses_name());
    holder.layoutt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View view) {
            // still thinking on how to apply this(this gets the ItemId of the recyclerview Items)
            long itemId = getRVItemId(position);  
            Log.i("itemId", String.valueOf(itemId));
            if (holder.expandableCardView.isShown()) {
                holder.expandableCardView.setVisibility(View.GONE);
            } else {
                holder.expandableCardView.setVisibility(View.VISIBLE);
                if(itemId == listClassesCSOS.get(position).getId()) {
                    StringBuilder sb = new StringBuilder();
                    listClassesCSOS = demeaSQL.getAllSectionsByClassesID();
                    // not used yet
                    sectionsList = demeaSQL.getAllSections();
                     // getAllSections()
                    for (ClassesBean c : listClassesCSOS ){
                        sb.append(c.sectionBeanGetName() + "\n" + "\n");
                        // sets the textView with data from database after a class name has been clicked
                        holder.addedSectionTV.setText(sb.toString()); 
                    }
                }
            }
        }
    });
    holder.add_class_section.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showAddSectionsDialog();
        }
    });
}

1 个答案:

答案 0 :(得分:0)

在持有人中调用demeaSQL.getAllSectionsByClassesID();。您没有设置所选类的id,因此每个类都会收到相同的值。

<强>更新

demeaSQL课程中,您需要新方法getAllSectionsByClassesID(long id)

然后改变

listClassesCSOS = demeaSQL.getAllSectionsByClassesID();

listClassesCSOS = demeaSQL.getAllSectionsByClassesID(itemId);