首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Singleton类将列表数据从一个片段传递到另一个片段?

如何使用Singleton类将列表数据从一个片段传递到另一个片段?
EN

Stack Overflow用户
提问于 2018-02-27 11:12:19
回答 4查看 3.6K关注 0票数 0

My Singleton类:,这是我在官方文档中找到的Singleton类。

代码语言:javascript
运行
复制
    public class Singleton {
    private static Singleton uniqInstance;
    private Singleton() {
    }
    public static Singleton getInstance() {
        if (uniqInstance == null) {
            {
                if (uniqInstance == null)
                   uniqInstance = new Singleton();
            }
        }
        return uniqInstance;
    }
   } 

我的第一个片段:--这是我的第一个片段,这里我要添加带有对象类名的ArrayList项。

代码语言:javascript
运行
复制
     public View onCreateView(LayoutInflater inflater, ViewGroup 
          container, Bundle savedInstanceState){
          View mView = inflater.inflate(R.layout.fragment_first, container,false);
          RecyclerView rvFirst = mView.findViewById(R.id.rv_first_layout);
          rvFirst.setHasFixedSize(true);
          rvFirst.setLayoutManager(new LinearLayoutManager(mView.getContext()));
          mArrayList = new ArrayList<Names>();
          mArrayList.add(new Names("Hello"));
          mArrayList.add(new Names("This"));
          mArrayList.add(new Names("Is"));
          mArrayList.add(new Names("Android"));

          // HERE I WANT TO SEND ARRAY-LIST DATA TO THE SECOND FRAGMENT
          mAdapter = new NameAdapter(mArrayList);
          rvFirst.setAdapter(mAdapter);
          return mView;
    }        

我的第二个片段:,这是我的第二个片段,这里我试图从第一个片段中获取ArrayList条目。

代码语言:javascript
运行
复制
     public View onCreateView(LayoutInflater inflater, ViewGroup 
          container,Bundle savedInstanceState){
          View mView = inflater.inflate(R.layout.fragment_second, container,false);
          rvSecond = (RecyclerView) mView.findViewById(R.id.rv_second_layout);
          rvSecond.setHasFixedSize(true);        
          rvSecond.setLayoutManager(new LinearLayoutManager(getContext()));        
          mArrayList = new ArrayList<Names>(); 

          // HERE I WANT TO GET ARRAY-LIST FROM FIRST FRAGMENT     
          mAdapter = new NameAdapter(mArrayList);
          rvSecond.setAdapter(mAdapter);
     return mView;
   }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-02-27 11:25:00

首先,在单例类中设置数组,如下所示

您的单例类应该如下所示:-

代码语言:javascript
运行
复制
public class Singleton {
private static Singleton uniqInstance;
public ArrayList<Names> names = new ArrayList<Names>();;
private Singleton() {
}
public static Singleton getInstance() {
    if (uniqInstance == null) 
         uniqInstance = new Singleton();
    return uniqInstance;
}
public void setArrayList(ArrayList<Names> names)
 {
      this.names = names;

     }
 public ArrayList<Names> getArrayList()
 {
      return this.names;

     }
} 

在列表中添加值后的第一个片段中:-

代码语言:javascript
运行
复制
Singleton.getInstance().setArrayList(mArrayList);

在你的第二个片段中,就像这样:-

代码语言:javascript
运行
复制
Singleton.getInstance().getArrayList();
票数 2
EN

Stack Overflow用户

发布于 2018-02-27 11:20:03

为什么要使用单例,如果两个片段都连接到相同的活动中,那么您可以这样做,

首先,在活动类中创建一个公共列表变量。

然后从片段类中引用它的上下文,如

代码语言:javascript
运行
复制
((YourActivityClass)getActivity()).myArrayList.get(i);
票数 2
EN

Stack Overflow用户

发布于 2018-02-27 11:13:56

您可以通过宿主活动传递它,也可以将它存储在类中。正式文件

其他选项包括EventBus、意图、MessageLooper。

EventBus非常简单,但是如果过度使用它,代码就会变成意大利面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49007322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档