Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从主活动访问活动中的适配器和其他数据_Java_Android_Android Activity_Android Adapter - Fatal编程技术网

Java 从主活动访问活动中的适配器和其他数据

Java 从主活动访问活动中的适配器和其他数据,java,android,android-activity,android-adapter,Java,Android,Android Activity,Android Adapter,我想知道在活动之间访问非原始数据的正确方法是什么。尽管有很多关于这个话题的问题和答案,我仍然认为我的问题还没有被提出 1) 主活动显示一个自定义适配器ToDoListAdapterToDomainActivity在onPause()和onResume()中为其方法loadItems()和saveItems()中的条目加载数据: 2) 另一个活动TodoChartActivity是从ToDoListAdapter视图触发的,它显示所有条目,但不同。为了显示条目,我需要主活动中适配器变量中的数据 根

我想知道在活动之间访问非原始数据的正确方法是什么。尽管有很多关于这个话题的问题和答案,我仍然认为我的问题还没有被提出

1) 主活动显示一个自定义适配器
ToDoListAdapter
ToDomainActivity
onPause()
onResume()
中为其方法
loadItems()
saveItems()
中的条目加载数据:

2) 另一个活动
TodoChartActivity
是从
ToDoListAdapter
视图触发的,它显示所有条目,但不同。为了显示条目,我需要主活动中适配器变量中的数据

根据互联网上的消息来源,在第二个活动中使用不同的方法来访问适配器变量(或任何其他变量):

  • 使
    mAdapter
    公开且静态,或公开其getter和setter坏方法
  • 从应用程序单例访问它
  • loadItems()
    saveItems()
    复制到omanageRactivity
    并再次将它们加载到内存中。因为我使用的内存比我实际需要的多得多--糟糕的方法
  • 通过intent extras传递一个列表条目的所有数据<有人告诉我,这是一种乏味的方法。另外,让我们想象一下,例如,我们需要所有条目。所以,这是一个普遍的问题
    对于如何在活动之间访问复杂对象和列表,您还有其他建议吗?

    ToDoManagerActivity是您的第一个活动,从这里开始启动ToDoListAdapter,从ToDoListAdapter开始启动TodoChartActivity

    这是一种常见的情况。因为您的数据是相同的,所以只需跨适配器共享数据即可


    到管理实用性到对象适配器中传递对象列表。现在,您的数据在此适配器中。现在,将相同的数据传递给TodoChartActivity

    一个单例不一定是一个坏方法,除非其内容的保存时间比两个活动使用的时间长。您甚至可以将容器对象放在WeakReference中,以便在使用数据的两个活动不再存在并保存对数据的引用后,对其进行垃圾收集。这种方法的主要缺点是,如果需要销毁和重新创建活动,则无法保存和保留它们的状态


    您还可以将数据持久化到sqlite数据库。如果您不想将所有对象中的所有字段拆分为sqlite字段,您可以“欺骗”并将它们序列化为JSON,如果您的模型数据可以表示为Java基元类型和基本集合,那么这将自动化此过程。如果您这样做,那么您的活动也可以从sqlite中保存的数据中重建自己,以防它们被Android破坏。缺点是,当不再使用这些数据时,您现在必须确定何时从数据库中删除这些数据。如果您需要在应用程序中一次多次使用此方案,您需要能够使用某个id识别每个数据集合,并确保id在活动之间共享。

    EditTodoActivity的名称表示您正在处理单个todo项目,因此为什么不传递其id并让EditTodoActivity加载相关详细信息。或者换句话说,您为什么要尝试传递适配器?@soshial,您始终可以通过Intent将数据从
    todomanagectivity
    传递到
    edittoactivity
    。如果要传递自定义对象,请确保它们实现了
    Parcelable
    接口。我知道,可以通过intent extras传递一个ToDoItem的数据,但我一般不知道。想象一下,每个列表条目都太大,无法像那样传递它。而且,每次放和提取额外数据都有点乏味。@soshial这就是为什么你要像Cory说的那样传递ID,然后提取相关数据。如果您只想加载一次数据,那么您会被您在原始文档中提到的糟糕方法所困扰question@chaitanya,如果我只向第二个活动传递一个id,那么我从何处获取所有数据。为了做到这一点,我需要再次将第二个活动中的所有数据加载到内存中,这在内存方面不是一件好事。这就是为什么访问mAdapter变量似乎是更好的选择,考虑到所有这些,您认为如何?我的确切问题是:如何访问。此外,我的适配器中没有充气到危险状态。另外,我只有一个适配器,而您声明有几个适配器。
    public class ToDoManagerActivity extends ListActivity {
        toDoListAdapter mAdapter;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mAdapter = new ToDoListAdapter(ToDoManagerActivity.this);
            .....
        }
    }