【问题标题】:Getting String values to Adapter Class for view将字符串值获取到适配器类以供查看
【发布时间】:2016-06-22 08:09:22
【问题描述】:

我目前有一个从其他类获取字符串值的片段类。 我需要将这些值填充到适配器类中并设置视图。学生到达时间和学生姓名的视图班级数据由服务器获取-

Student arrival time     Student name      Present/Absent
    10:50                  John
    10:55                  Alex
    11:00                  Peter  
    11:07                  Mark

我在 Fragment 类中获取 Present/Absent 的字符串值,我需要在适配器类中更新 Present/Absent 列中的视图。 请注意,到达时间是按升序排列的。因此,当叫出考勤时,出席/缺席会通过语音识别和 填充在存在/不存在列中。

我有 2 个问题 -

a) 我需要为学生姓名和学生到达时间列创建完全相同行数的文本视图

b) 即使我为完全相同的行数创建 textviews,我如何每次都将 textview 值更改为 Yes 或 No,因为更改 textview 一次会改变其余的行数

【问题讨论】:

    标签: android


    【解决方案1】:

    我认为,你应该使用RecyclerView

    Here你可以找到一个很好的描述如何使用RecyclerView

    这是我的示例:

    你的片段

    public class YourFragment extends Fragment {
    
        private RecyclerView recyclerView;
        private RecyclerView.Adapter adapter;
        private RecyclerView.LayoutManager layoutManager;
        private List<Student> studentList;
    
        @Override
        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
    
            studentList = new ArrayList<>();
    
            recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
            layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
            adapter = new StudentsAdapter(studentList);
    
            recyclerView.setLayoutManager(layoutManager);
            recyclerView.setAdapter(adapter);
    
            //This method fetch students list from server and insert them into studentList
            fetchStudentsList();
        }
    }
    

    学生适配器

    public class StudentsAdapter extends RecyclerView.Adapter<StudentsAdapter.ViewHolder> {
    
        private List<Student> studentList;
    
        public StudentsAdapter(List<Student> studentList) {
            this.studentList = studentList;
        }
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            View itemView = inflater.inflate(R.layout.student_layout, parent, false);
            ViewHolder holder = new ViewHolder(itemView);
            holder.name = (TextView) itemView.findViewById(R.id.student_name);
            holder.arrivalTime = (TextView) itemView.findViewById(R.id.student_arrival_time);
            holder.present = (TextView) itemView.findViewById(R.id.student_present);
            return holder;
        }
    
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            Student student = studentList.get(position);
            holder.name.setText(student.name);
            holder.arrivalTime.setText(student.arrivalTime);
            holder.present.setText(student.present ? R.string.yes : R.string.no);
        }
    
        @Override
        public int getItemCount() {
            return studentList.size();
        }
    
        public static class ViewHolder extends RecyclerView.ViewHolder {
    
            public TextView name;
            public TextView arrivalTime;
            public TextView present;
    
            public ViewHolder(View itemView) {
                super(itemView);
            }
        }
    }
    

    学生班

    public class Student {
        public String arrivalTime;
        public String name;
        public boolean present;
    }
    

    要更新recyclerView中的一些信息,只需更改Student对象中的值,然后调用方法adapter.notifyDataSetChanged()

    另请参阅:

    【讨论】:

    • 是否有可能获得抽象列表视图的位置,并根据该位置更新文本视图
    • 是的,您可以使用studentList.indexOf(studentA); 方法,其中studentA 是一些Student 对象。方法indexOf是使用方法equals比较两个对象,所以你要覆盖Student.class中的方法equals,比较两个学生,例如:按姓名
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2018-05-24
    相关资源
    最近更新 更多