【问题标题】:Android: How to access from activity to update private variable of another activityAndroid:如何从活动访问以更新另一个活动的私有变量
【发布时间】:2015-02-04 15:10:36
【问题描述】:

我正在尝试做类似的事情,首先,有一个 MainActivity 将课程存储在 ArrayList 中,这些课程由 listview 显示。之后,我通过 startActivity() 传递给另一个名为 ShowDetailActivity 的活动来显示单击列表视图元素时的课程详细信息。然后,我传递到另一个名为 EditCourseActivity 的活动来编辑 ShowDetailActivity 显示的课程。问题是,当我想编辑 course 时,我必须访问 MainActivity 的 Arraylist (私有),但我不能通过 startActivity() 因为 MainActivity 确实重新启动(重新安装),这就是为什么 arraylist 上没有课程。问题是如何从 EditCourseActivity 访问 MainActivity 的数组列表以显示更新的课程?

【问题讨论】:

    标签: android android-activity arraylist private start-activity


    【解决方案1】:

    将课程信息存储在单例类中

    public class CourseHolder{
        public static CourseHolder instance=null;
        public static CourseHolder getInstance(){
            if(instance==null){
                instance=new CourseHolder();
            }
            return instance;
        }
        private Course courses[];
        private CourseHolder(){
            courses=new Course[10];
        }
        public void setCourse(int index, Course course){
            courses[index]=course;
        }
        public Course[] getCourses(){
            return courses;
        }
    }
    

    在EditCourseActivity中,编辑完成后,将更新后的课程信息存放在CourseHolder的副本中

    在MainActivity.onResume()中,调用listView.setAdapter(null),然后用CourseHolder里面的数据刷新

    【讨论】:

    • 感谢您的回答帕特里克,现在我正在研究您的解决方案。如果我有问题,我会再次询问您的答案。
    • 再次感谢您的关注,您的解决方案非常适合练习,我将使用它来解决问题。祝你有美好的一天。
    【解决方案2】:

    作为一个通用答案:将数据与其表示分离。您可以通过多种方式实现这一目标:

    • 数组列表的单例包装器
    • 具体到 android:将数组包装在 ContentProvider 中
    • 使用 Android SDK SQL 数据库支持

    【讨论】:

    • 感谢您的回答,是的,我知道 ContentProvider 和 SQLite 数据库是解决方案,但到目前为止我无法使用它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2021-08-17
    • 2015-02-16
    相关资源
    最近更新 更多