来自activity的putExtra然后是片段中的getExtra

时间:2017-12-08 02:08:26

标签: android android-fragments

我试图将活动中的额外内容添加到片段中。但有些事情是错的!有谁有想法?我的情况不同,因为我想在片段中做到这一点

myActivity:

<div style="display:flex; flex-direction: row; justify-content: center; align-items: center">
     <input type="button" value="Previous" id="btnPrevious"/>
     <span id="spanStage">Stage 5</span>
     <input type="button" value="Next" id="btnNext"/>
</div>

myfragment

if(email.matches(users.user1)&&password.matches(users.pass1)){
        Intent intent = new Intent(LoginActivity.this,MainActivity.class);
        Intent i = new Intent(LoginActivity.this,ProfileFragment.class);
        i.putExtra("pn", users.pn1);
        i.putExtra("name", users.name1);
        i.putExtra("family", users.family1);
        i.putExtra("rank", users.rank1);
        startActivity(intent);
        finish();
    }
你好。我试图从活动中获取额外的内容。但有些事情是错的!有谁有想法?

3 个答案:

答案 0 :(得分:3)

您启动意向呼叫意图。但意图有数据是我,它还没有开始。

您可以使用setArgument和getArgument从活动发送和接收数据到片段或从片段到片段:

在YourReceiveFragment中:

public static Fragment newInstance(String data1, String data2, ...) {
    Fragment f = new YourReceiveFragment();
    Bundle bundle = new Bundle();
    bundle.putString(DATA_RECEIVE1, data1);
    bundle.putString(DATA_RECEIVE2, data2);
    f.setArguments(bundle);
    return f;
}

在您的活动中:只需拨打电话:

Fragment f = YourReceiveFragment.newInstance(yourString1, yourString2);

                            FragmentTransaction ft = getFragmentManager().beginTransaction();
                            ft.add(R.id.main_container, f).commit();

然后在YourReceiveFragment中:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null){
        String dataReceive1 = getArguments().getString(DATA_RECEIVE1);
        String dataReceive2 = getArguments().getString(DATA_RECEIVE2);
    }
}

如果您想将活动中的数据发送到另一个活动中的片段,请使用接口或更简单的方法是将数据传递给包含片段的活动,然后将数据发送到片段。

答案 1 :(得分:1)

您可以使用捆绑包发送数据,建议

从活动传递数据

fragment = new YourFragment();

if (fragment != null) {
    FragmentManager fragmentManager = getFragmentManager();

    Bundle bundle = new Bundle();
    bundle.putString("key", "value");

    fragment.setArguments(bundle);

    fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
}

从Fragment

接收数据
  String var = getArguments().getString("value");

答案 2 :(得分:1)

无法使用startActivity创建片段。您需要使用这样的包创建片段:

count = 0

for (i in 1:1000) {

  count = ifelse(i %in% 1:100, count + 1, count)

}

count

#> [1] 100

然后在你的ProfileFragment fragment = new ProfileFragment(); Bundle args = new Bundle(); args.putString("name", users.name1); args.putString("family", users.family1); fragment.setArguments(args); // then tell the FragmentManager to attach the fragment // to the activity FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.your_placeholder, fragment); ft.commit(); 中获取:

onCreateView

请记住,您需要将返回代码移至String name = getArguments().getString("name", ""); String family = getArguments().getString("family", ""); 方法的最后一个,并将代码更改为以下内容:

onCreateView