有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Android Studio上显示多个回收器视图?

这对Android应用程序开发来说是个新鲜事。我不确定我问的问题是否正确,但这是我的情况。我有一个简单的成绩册应用程序,如下所示:

enter image description here

我的目标是在应用程序上显示多个课程。我正在使用RecyclerView来实现这一点,在我的活动中使用以下onCreate函数将课程信息传递给适配器:

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grade);

        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

        for(int i = 0; i<2; i++)
        {
            Course course = Course.generateRandomCourse();

            recyclerView = (RecyclerView) findViewById(R.id.togglegrades);
            layoutManager = new LinearLayoutManager(this);
            recyclerView.setLayoutManager(layoutManager);

            mAdapter = new RecyclerViewAdapter(course);
            recyclerView.setAdapter(mAdapter);
        }

我的for循环目标是显示两个课程,但事实并非如此。我不确定是否需要修改我的回收适配器来获取课程列表,或者是否有一种简单的方法来显示多个课程

非常感谢您的帮助!感谢您抽出时间:)

编辑:在XML中添加2个回收器并尝试调用这两个回收器后,我使用了以下代码:

        Course course = Course.generateRandomCourse();
        Course course1 = Course.generateRandomCourse();

        recyclerView = (RecyclerView) findViewById(R.id.togglegrades);
        recyclerView1 = (RecyclerView) findViewById(R.id.togglegrades1);

        layoutManager = new LinearLayoutManager(this);
        layoutManager1 = new LinearLayoutManager(this);


        recyclerView.setLayoutManager(layoutManager);
        recyclerView1.setLayoutManager(layoutManager1);

        mAdapter = new RecyclerViewAdapter(course);
        mAdapter1 = new RecyclerViewAdapter(course1);

        recyclerView.setAdapter(mAdapter);
        recyclerView1.setAdapter(mAdapter1);

现在输出只是重叠的

enter image description here

编辑2:包括下面的完整适配器代码

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
{
    private static final int TYPE_HEADER = 0;
    private static final int TYPE_ITEM = 1;

    private List<Course> courses = new ArrayList<>();
    private ArrayList<Assignment> assignments;
    private String course;
    private String average;


    public RecyclerViewAdapter(List<Course> courses)
    {
        for(Course c : courses)
        {
            course = c.getCourseTitle();
            assignments = c.getAssignments();
            if(assignments.size()==0)
            {
                average = "0";
            }
            else
            {
                Integer grade_total = new Integer(0);
                Integer assignment_total = new Integer(0);
                for (Assignment i : assignments)
                {
                    grade_total += i.getAssignmentGrade();
                    assignment_total++;
                }
                average = Integer.toString(grade_total /assignment_total);
            }
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType)
    {

        if(viewType == TYPE_HEADER)
        {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.header_course,parent,false);
            return new ViewHolderHeader(v);
        }
        else if(viewType == TYPE_ITEM)
        {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_course, parent, false);
            return new ViewHolderItem(v);
        }
        else return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
    {
        if(holder instanceof ViewHolderHeader)
        {
            ViewHolderHeader VHHeader = (ViewHolderHeader)holder;
            VHHeader.title.setText(course);
            VHHeader.average.setText("Average: " + average + "%");
        }
        else if(holder instanceof ViewHolderItem)
        {
            String assignemnt_name = assignments.get(position-1).getAssignmentTitle();
            String assignment_grade = Integer.toString(assignments.get(position-1).getAssignmentGrade());
            ViewHolderItem VHItem = (ViewHolderItem)holder;
            VHItem.name.setText(assignemnt_name);
            VHItem.grade.setText(assignment_grade + "%");
        }

    }

    @Override
    public int getItemCount()
    {
        return assignments.size() + 1;
    }

    private boolean isPositionHeader(int position)
    {
        if(position == 0)
            return true;
        else
            return false;
    }

    @Override
    public int getItemViewType(int position)
    {
        if(isPositionHeader(position))
            return TYPE_HEADER;
        return TYPE_ITEM;
    }

    public class ViewHolderHeader extends RecyclerView.ViewHolder
    {
        TextView title;
        TextView average;
        public ViewHolderHeader(View view)
        {
            super(view);
            this.title = (TextView)itemView.findViewById(R.id.course);
            this.average = (TextView)itemView.findViewById(R.id.average);
        }
    }

    public class ViewHolderItem extends RecyclerView.ViewHolder
    {
        TextView name;
        TextView grade;
        public ViewHolderItem(View view)
        {
            super(view);
            this.name = (TextView)itemView.findViewById(R.id.assignment);
            this.grade = (TextView)itemView.findViewById(R.id.grade);
        }
    }

}

共 (0) 个答案