Как передать Bundle из фрагмента в фрагмент
Я использую фрагменты в своем приложении. Это мой первый фрагмент, который просто надувает XML файл:
public class FragmentA extends SherlockFragment
{
Context myContext,appContext;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
myContext = getActivity();
appContext=getActivity().getApplicationContext();
arguments = getArguments();
doctor_id=arguments.getInt("doctor_id");
userType=arguments.getString("userType");
return inflater.inflate(R.layout.left_panel, container,false);
}
и это файл left_panel.xml, содержащий фрагмент:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<fragment
android:id="@+id/titles"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
class="com.example.sample.ListFrag" />
</LinearLayout>
Это мой класс ListFrag:
public class ListFrag extends Fragment
{
Context myContext,appContext;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
layoutView = inflater.inflate(R.layout.activity_doctor_list,container);
myContext = getActivity();
appContext=getActivity().getApplicationContext();
arguments=getArguments();
int doctor_id=arguments.getInt("doctor_id");
}
}
Я не знаю, как передать Bundle arguments
из FragmentA в ListFrag.
Ответы
Ответ 1
В вашем фрагменте FragmentA установите в качестве аргумента пакет.
Bundle args = new Bundle();
args.putInt("doctor_id",value);
ListFrag newFragment = new ListFrag ();
newFragment.setArguments(args);
В вашем фрагменте ListFrag получите пакет как
Bundle b = getArguments();
int s = b.getInt("doctor_id");
Ответ 2
Фрагмент для определения фрагмента и получение аргумента:
Начало работы:
int friendId = 2; //value to pass as extra
i = new Intent(firstActivity, SecondActivity.class);
i.putExtra("friendsID", friendId);
firstActivity.startActivity(i);
SecondActivity:
Fragment_A mFragment_A = new Fragment_A();
mFragment_A.setArguments(getIntent().getExtras());
Fragment_A:
Bundle bundle = new Bundle();
String Item = getArguments().getString("friendsID");
bundle.putInt("friendsID", Integer.parseInt(Item));
// code
Fragment_B mFragment_B = new Fragment_B();
mFragment_B.setArguments(bundle);
Fragment_B:
Bundle bundle = getArguments();
int value = bundle.getInt("friendsID");
Log.e("value Fragment get Argument ", "friendsID :" + value);
эта работа для меня, попробуйте это, возможно, этот образец поможет вам.
Ответ 3
Создайте статический метод ListFrag в ListFrag, например:
public static ListFrag newInstance(int doctorId) {
ListFrag frag = new ListFrag();
Bundle args = new Bundle();
args.putExtra("doctor_id", doctorId);
frag.setArguments(args);
return frag;
}
Когда вы создаете ListFrag из фрагмента A, вы вызываете:
Fragment frag = ListFrag.newInstance(this.doctor_id);
// use frag with getSupportChildFragmentManager();
Ответ 4
У вас есть два варианта:
а. Если у вас есть ссылка на ваш ListFragmentВы можете установить целевой фрагмент для FragmentA, выполнив следующее:
- в FragmentA
this.setTargetFragment(yourListFragment);
- затем
this.getTargetFragment().setArguments(yourBundle);
- и в ListFragment верните его с помощью
this.getArguments();
В. Самый логичный способ
Держу пари, что ваш фрагмент находится в одной и той же деятельности, поэтому у нее есть ссылки на них.
Вы можете передать данные в свою деятельность с FragmentA и передать ее в СписокFragment
FragmentA --Data → FragmentActivity --Data → ListFragment