我有一个使用以下代码创建片段的主要活动
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();
}
}
这是片段的代码。
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;
}
我想在上面的片段类中调用一个方法。我无法做到这一点,因为我没有在XML文件中给出片段的id。我没有使用XML加载静态片段。因此,我没有Id。
我已经在StackOverFlow上看到了this和this个问题,但它们并没有解决我的问题。
如果有人知道如何处理这种情况,请提供帮助。
答案 0 :(得分:1)
首先让你的所有片段实现一个接口。此接口将返回一个String(例如),它将识别您的片段,然后在使用findFragmentById()
获取片段后将片段转换为该片段,如下所示:
创建您的界面
public interface IFragmentName
{
public String getFragmentName();
}
实施您的界面(例如在NoteList
)
public NoteList extends Fragment implements IFragmentName
{
//Do your stuff...
public String getFragmentName()
{
return "NoteList";
}
}
在此之后从您的活动获取当前片段
IFragmentName myFragment = (IFragmentName) getSupportFragmentManager().findFragmentById(R.id.content_frame);
最后检查您的getFragmentName()
值并转换为您想要的片段:
if(myFragment.getFragmentName().equals("NoteList")
{
NoteList myNoteListFragment = (NoteList) myFragment;
myNoteListFragment.callMyMethod(); //here you call the method of your current Fragment.
}
我在没有任何IDE的情况下对这些片段进行了编码,所以也许我错过了分号或类似的内容:)
希望有所帮助
答案 1 :(得分:0)