【问题标题】:how to open fragment from another activity android如何从另一个活动android打开片段
【发布时间】:2018-03-11 14:12:09
【问题描述】:

我正在尝试使用 startactivityfromfragment() 我没有发现 sumthing 对我来说是一个很好的例子 直到现在我能够将数据(网址字符串)从一个片段移动到另一个片段 现在它是一个不同的故事.. 我想我需要使用 startactivityfromfragment().. 但不知道怎么做

Bundle bundle = new Bundle();
                bundle.putString("WEB","someweb.com");
                MultiFragment multiFragment = new MultiFragment();
                multiFragment.setArguments(bundle);
                Intent intent1 = new Intent(getBaseContext(), MultiFragment.class);
                startActivityFromFragment(MainActivity.class,intent1,"WEB");

【问题讨论】:

  • 你可以简单地使用意图从一个片段开始一个活动。
  • 我可以轻松地使用主要活动的意图 - 是的.. 但我想进入作为 MainActivity 一部分的片段 - 另一个活动

标签: java android android-fragments android-intent android-activity


【解决方案1】:

试试这个: 将此代码放在您要打开活动的当前片段中。

 Intent i=new Intent(getActivity(),Multifragment.class);
    i.putExtra("key","value");
    getActivity().startActivity(i);

在下一个包含片段的活动中,放置这些:

String value=getIntent().getStringExtra("key");
Bundle bundle=new Bundle();
bundle.putString("key",value);
YourFragmentClass ob=new YourFragmentClass();
ob.setArguments(bundle);
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.your_container_layout,ob).addToBackStack(null).commit();

然后,在 YouFragmentClass 中:

Bundle=getArguments();
if(bundle!=null}
String value=bundle.getString("key");

【讨论】:

  • MaiinActivity' 不是封闭类.. 所以它是一个错误.. evryithing 是一个错误
  • 谢谢您.. 我花了一段时间才了解您-它从另一个活动到另一个包含片段的活动对我有用-摇滚!
  • 如果您使用的是分页器适配器,请查看我的回答stackoverflow.com/a/55722092/3904109
【解决方案2】:

使用您的 Activity 名称作为 MultiFragment 所在的第二个参数

            Intent i = new Intent(MainActivity.this, ActivityName.class);
                       putExtras(bundle);
                        startActivity(i);
                        finish();

【讨论】:

  • 是的,但我需要进入活动中的特定片段
  • multifragment.class 我是 webview 的片段...我尝试将其称为片段但没有成功
【解决方案3】:

方法一

为了将数据从活动发送到另一个活动的片段,调用具有捆绑值的普通意图,在另一个活动中检查 getIntent() 并从该片段调用方法

Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("web_url", "url");
startActivity(intent);

并从另一个活动调用

String webUrl = getIntent().getStringExtra("web_url");
Fragment newFragment = getSupportFragmentManager().findFragmentById(R.id.frame_tab);
newFragment.openWeb(webUrl);

方法二 在第二个活动中创建一个静态变量并保存来自 getIntent() 的数据,并在片段中使用该变量。

方法 3

    interface FragmentListner{
    void openFragment(String url);
}

活动 A:

    FragmentListner frag = new FragmentListner();
    frag.openFragment("Url");

活动 B:

class B implements FragmentListner{

void openFragment(String url){
//Open Fragment here
}

【讨论】:

  • 是的,但它是另一个活动中的一个片段 - 不是一个活动的活动 - 你知道如何使用它吗? startactivityfromfragment()
  • 如果你想从片段中打开一个活动,而不是通常将“this”更改为 getActivity() 并使用 getActivirty().startActivity(intent);
  • 使另一个活动中的接口在那里初始化并从该接口调用一个函数并在您想要在该方法上打开片段的那个活动中实现
  • 问题是 - 只有当我来自这个活动时,我才需要打开它 - 带我到 Multifragment.. 其他所有的只是带我到 MainFragment
【解决方案4】:

我认为:

在不包含片段的活动中:

Intent intent = new Intent(ActivityA.this, ActivityB.class);
                    intent.putExtra("something", "yep");
                    startActivity(intent);

并且,在下一个包含片段的活动中:

Intent intent = getIntent();
String op = intent.getStringExtra("something");
if (op != null){
   getSupportFragmentManager().beginTransaction().replace(R.id.nav_host_fragment,
         new YourFragment()).addToBackStack(null).commit();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多