当前位置: 首页 > 知识库问答 >
问题:

安卓:碎片无法获得activity

伊光赫
2023-03-14

我有一个做片段交易的activity

DetailFragment newFragment = new DetailFragment();
transaction.replace(R.id.mylist, newFragment);
transaction.addToBackStack(null);
transaction.commit();

很管用。现在,我知道在我的activity中有一个动态字符串,我需要在NewFragment中的布局中替换。我想我可以在transaction.commit()之后调用类似于

newFragment.setMyString("my dynamic value");

在newFragment.java中

public void setMyString(String s)
{
 TextView tv = (TextView) getActivity().findViewById(R.id.myobject);
 tv.setText(s);
}

关键是getActivity()返回null。如何获得查找布局元素所需的上下文?

编辑:

我试图遵循使用捆绑的路线,因为这似乎是最干净的方式。所以我更改了代码:

Bundle b = new Bundle();
b.putString("text", "my dynamic Text");
DetailFragment newFragment = new DetailFragment();
transaction.replace(R.id.mylist, newFragment);
transacthtml" target="_blank">ion.addToBackStack(null);
transaction.commit();

我的onCreateView片段如下所示:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
   View v = inflater.inflate(R.layout.mylayout, container, false);
   TextView t = (TextView) v.findViewById(R.id.texttobereplaced);
   t.setText(savedInstanceState.getString("text");
}

savedInstranceState似乎是空的。我应该在哪里找到我的包裹?

编辑2:

答复中缺少getArguments()。现在起作用了。

共有1个答案

卫阳曜
2023-03-14

您的片段还没有附加到activity中,这也意味着您的布局还没有膨胀(请参阅片段生命周期)。这里的最佳解决方案是通过fragment.setarguments(Bundle)方法将string值作为参数添加到fragment中。这可以通过fragment.getArguments()方法在接收fragment中检索。

 类似资料:
  • 我正在创建一个带有操作栏的应用程序,这些选项卡会转到不同的网页。当用户点击一个不同的选项卡时,我希望以前的选项卡网页保持在相同的状态(即当再次按下该选项卡时不重新加载)。 做这件事最好的方法是什么?单独的活动?碎片?一个activity有多个网页视图? 谢谢

  • 我有三个片段F1 F2 F3 F4都可以从侧边栏访问。 这四个都可以在任何时间以任何顺序调用, 现在我想知道,如果已经单击(创建)了F1,则不再创建F1,而只使用片段管理器将片段F1带回到前面。所有其他片段相同 到目前为止,我对容器中的每个片段都尝试了这种方法(片段活动) 如果部分确保不再重新创建片段(如果已经创建),那么我应该在部分中写些什么,以便可以将已经创建的片段放在视图层次结构的前面 请帮

  • 自我介绍:我有稍微学一下安卓的就先问安卓 activity的生命周期 view的加载过程 ondraw有什么注意事项吗(没答上来) linearlayout和relativelayout哪个加载会更费时间 然后问java hashmap是线程安全的吗,会有什么问题 concurrenthashmap怎么保证线程安全 了解jvm吗(还没看,不会) 然后写一题简单的遍历列表,没写完时间到了就停了,让我

  • 一面主要是八股,总共35min左右 1. 自我介绍 2. 用过得物app吗 3. 介绍一下七层模型,每一层的作用 4. 生产者消费者模型,应用(线程池) 5. 用过线程池吗,线程池如何实现 6. 进程间通信方式 7. http请求的过程 8. 什么是多态,应用场景 9. 了解过设计模式吗?单例模式,应用场景 10. epoll的优势 11. 手撕简单题 12. 项目中遇到什么困难,应用场景 13.

  • 1.自我介绍 2.问自我介绍中提到的安卓项目; 3.activity的生命周期,各个阶段的方法名叫什么; 4.安卓的那些场景会导致内存泄漏; 5.c++的垃圾回收机制(自己不懂安卓的内存泄漏,然后答了c++的内存泄漏,所以面试官问了c++); 6.tcp的三次握手和四次挥手; 7.为什么tcp客户端的time-wait状态必须等待2MSL; 8.http1.1与http2.0之间的区别; 9.线程

  • 所以我决定在放弃一段时间后再回到android开发。我在android studio中重新开始制作一个旧项目,我遇到了一个问题,我得到了“无法解析符号碎片容器”,我确信它上次是有效的。