Как передать Bundle из фрагмента в фрагмент - программирование
Подтвердить что ты не робот

Как передать 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.

4b9b3361

Ответ 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