簡體   English   中英

如何將數據從片段活動傳遞到片段

[英]How to pass data from fragment activity to fragments

我在FragmentActivity中進行服務調用,我需要將兩個數據(名稱和地址)分別傳遞給Fragment A和FragmentB。

這是我嘗試的代碼。

 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);

}
}

這樣傳遞活動中的數據

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

並在Fragment中的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()獲得數據。

您可以通過從fragment調用Activity的方法來簡單地訪問Activity的數據:

獲取Fragment中的值:

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

C級

public String getValue()
{
   return trainerStrDescription;
}

希望對你有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM