gpt4 book ai didi

java - Activity 如何调用动态创建的 fragment 内的方法

转载 作者:行者123 更新时间:2023-12-01 12:16:52 25 4
gpt4 key购买 nike

我有一个主要 Activity ,它使用以下代码创建 fragment

private void launchFragment(int pos)
{
Fragment f = null;
String title = null;
if (pos == 1)
{
title = "Friends";
f = new FriendList();
}
else if (pos == 2)
{
title = "Notes";
f = new NoteList();
}
else if (pos == 3)
{
title = "Projects";
f = new ProjectList();
}
else if (pos == 5)
{
title = "About";
f = new AboutUs();
}
else if (pos == 6)
{
startActivity(new Intent(this, Login.class));
finish();
}
if (f != null)
{
while (getSupportFragmentManager().getBackStackEntryCount() > 0)
{
getSupportFragmentManager().popBackStackImmediate();
}
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, f).addToBackStack(title)
.commit();
}
}

这是一个 fragment 的代码。

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.group_chat, null);

loadConversationList();

contactName = this.getArguments().getString("contactusername");

contactId = this.getArguments().getString("contactid");


ListView list = (ListView) v.findViewById(R.id.list);
adp = new ChatAdapter();
list.setAdapter(adp);
list.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
list.setStackFromBottom(true);

txt = (EditText) v.findViewById(R.id.txt);
txt.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_MULTI_LINE);

setTouchNClick(v.findViewById(R.id.btnCamera));
setTouchNClick(v.findViewById(R.id.btnSend));
return v;
}

我想调用上面 fragment 类中的方法。我无法执行此操作,因为我没有在 XML 文件中给出 fragment 的 id。我没有使用 XML 加载静态 fragment 。因此,我没有 ID。

我已经看过thisthis StackOverFlow 上的问题,但它们并没有解决我的问题。

如果有人知道如何解决这种情况,请提供帮助。

最佳答案

首先让所有 fragment 实现一个接口(interface)。该接口(interface)将返回一个字符串(例如),它将标识您的 fragment ,然后在使用 findFragmentById() 获取 fragment 后将 fragment 转换为该字符串,如下所示:

创建您的界面

 public interface IFragmentName
{
public String getFragmentName();
}

实现您的界面(例如在 NoteList 中)

public NoteList extends Fragment implements IFragmentName
{
//Do your stuff...
public String getFragmentName()
{
return "NoteList";
}

}

之后从您的 Activity 中获取当前 fragment

IFragmentName myFragment = (IFragmentName) getSupportFragmentManager().findFragmentById(R.id.content_frame);

最后检查您的 getFragmentName() 值并转换为您想要的 fragment :

if(myFragment.getFragmentName().equals("NoteList")
{
NoteList myNoteListFragment = (NoteList) myFragment;
myNoteListFragment.callMyMethod(); //here you call the method of your current Fragment.
}

我在没有任何 IDE 的情况下编写了这些 fragment ,所以也许我错过了分号或类似的东西:)

希望对你有帮助

关于java - Activity 如何调用动态创建的 fragment 内的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26945034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com