【问题标题】:How to pass data from fragment activity to fragments如何将数据从片段活动传递到片段
【发布时间】:2015-01-27 15:13:52
【问题描述】:

我正在FragmentActivity 进行服务调用,我需要分别将两个数据(名称和地址)传递给片段 A 和片段 B。

这是我尝试过的代码。

 public class C extends FragmentActivity {
// public PassDataToFragments fragmentCommunicator;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.detail_pager);
    serviceCall();
}

void serviceCall() {
    JSONObject totalData = new JSONObject(result);
    JSONObject jsonData = totalData.getJSONObject("result");
    trainerStrName = jsonData.getString("name");
    trainerStrAddress = jsonData.getString("address");
    // activityCommunicator.passDataToFragment(trainerStrName); i am
    // null pointer exception
    // pass name to fragment A and address to fragment B
}

@Override
public SherlockFragment getItem(int arg0) {
    switch (arg0) {

    // Open Previous Projects
    case 0:
        FragmentA fragmentA = new FragmentA ();
        return fragmentA;

        // Open Certification
    case 1:
        FragmentB fragmentB = new FragmentB ();
        return fragmentB;

    }
    return null;
}
}

我尝试的是我使用了接口,但我不知道如何使用并将名称的值获取到 FragmentA 并将地址的值获取到 Fragment B:

 public interface PassDataToFragments {
 public void passDataToFragment(String someValue);
  }
 class Fragment A extends Fragment implement PassDataToFragment{
 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.trainers_certification,
            container, false);
 return view;
 }
 @Override
  public void passDataToFragment(String someValue) {
    //Log.e("string",someValue);

}
}

【问题讨论】:

  • 该主题在官方基础培训页面上进行了解释:developer.android.com/training/basics/fragments/…您是否尝试过按照给定的示例?
  • @Shadow :不需要使用interface。使用参数化的类构造函数将数据从 Activity 传递到 Fragments
  • setArgument 不应该是更好的选择吗?

标签: android android-intent android-fragments android-fragmentactivity


【解决方案1】:

从这样的活动中传递数据

Bundle bundle = new Bundle();
bundle.putString("name", name);
bundle.putString("address", address);
FragmentA fragmentA = new FragmentA();
fragmentA.setArguments(bundle);

并在片段 A onCreateView 方法中像这样检索它:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {   
    return inflater.inflate(R.layout.fragment, container, false);
    String name = getArguments().getString("name");    
    String address = getArguments().getString("address"); 
}

编辑

如果片段已经加载,那么你可以这样做(使用你当前的实现)

这样发送数据

PassDataToFragment fragA = (PassDataToFragment) getSupportFragmentManager().findFragmentById(R.id.container); // Change the id as per yours
fragA.passDataToFragment(name, address);

您将在片段 A 内的passDataToFragment() 中获取数据。

【讨论】:

  • 谢谢。我需要在活动的 getItem 方法中传递捆绑包吗?
【解决方案2】:

您可以通过从片段中调用 Activity 的方法来简单地访问 Activity 的数据:

获取 Fragment 中的值:

String name = ((C)getActivity()).getValue();
Toast.makeText(getActivity(), name, Toast.LENGTH_SHORT);

C类:

public String getValue()
{
   return trainerStrDescription;
}

希望对你有所帮助ツ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多