片段和主机活动通信

时间:2014-01-20 08:10:26

标签: android android-fragments

我有这个设计问题。我有一个活动,它承载两个片段,任何给定的时间点只有一个活动是可见的。

活动A托管片段B和片段C

主机活动A实现FragmentCommunicator接口并使用此方法实现响应(int code)方法通信器片段B和C都可以与主机Activity通信。

现在问题就在于此。

在onClick of Host活动中,我检查某些条件并根据我决定显示哪个片段。

public void onClick(View v) {

    switch (v.getId()) {
    case R.id.some_button
              if(authNotedone)
                  showFragmentA();
              else{
                  EDIT: //setting some properties before showing Fragment B
                  showFragmentB();     
              }
    }
}

到目前为止一切正常。如果条件为真,则可以使用登录表单显示FragmentA。成功登录后,我想再次显示片段B.我怎样才能做到这一点。

我尝试了什么?

1)成功登录后片段A使用Fragmentcommunicator的响应(代码)方法向Host活动发送消息,但它设计很难看,因为如果代码成功,我必须调用performClick()或在response方法中调用showFragmentA()。 / p>

我的程序中可能有多个这样的条件我如何能够整齐地处理这些问题?

2 个答案:

答案 0 :(得分:1)

使用界面作为对活动的回调。在活动中收到消息后,无需单击按钮即可替换容器中的现有片段。

在活动中实施界面

 FragmentB newFragment = new FragmentB();
 Bundle args = new Bundle();
 args.putInt("key", "message");
 newFragment.setArguments(args);
 FragmentTransaction transaction = getFragmentManager().beginTransaction();
 transaction.replace(R.id.fragment_container, newFragment);
 // replace with fragmentb. no need to perform click again.
 // based on the message you decide which fragment you want to replace with 
 transaction.commit();

你可以找到一个例子@

http://developer.android.com/training/basics/fragments/communicating.html

答案 1 :(得分:0)

你想在片段之间导航吗?如果是这样,为什么不实施导航标签,请查看this link