如何将数据从片段 activity 传递到片段
How to pass data from fragment activity to fragments
我正在 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 的名称值和片段 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);
}
}
像这样从 activity 传递数据
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()
中的数据。
您可以通过从片段调用 Activity 的方法来访问 Activity 的数据:
获取片段中的值:
String name = ((C)getActivity()).getValue();
Toast.makeText(getActivity(), name, Toast.LENGTH_SHORT);
C Class :
public String getValue()
{
return trainerStrDescription;
}
希望对你有帮助ツ
我正在 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 的名称值和片段 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);
}
}
像这样从 activity 传递数据
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()
中的数据。
您可以通过从片段调用 Activity 的方法来访问 Activity 的数据:
获取片段中的值:
String name = ((C)getActivity()).getValue();
Toast.makeText(getActivity(), name, Toast.LENGTH_SHORT);
C Class :
public String getValue()
{
return trainerStrDescription;
}
希望对你有帮助ツ