活动如何调用动态创建的片段内的方法

时间:2014-11-15 10:53:19

标签: java android android-fragments

我有一个使用以下代码创建片段的主要活动

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上看到了thisthis个问题,但它们并没有解决我的问题。

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

2 个答案:

答案 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)

我知道我为聚会太迟了。但这对其他人有用。

如果您正在使用ViewPager渲染片段,请在父Activity中使用此代码。

Check Solution here