2013-06-12 7 views
26

Я использую фрагменты в своем приложении. Это мой первый фрагмент, который просто надуть XML файл:Как передать Bundle из фрагмента в фрагмент

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.

ответ

0

Создать статический метод 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 из фрагмента А вы бы назвали:

Fragment frag = ListFrag.newInstance(this.doctor_id); 
// use frag with getSupportChildFragmentManager(); 
+0

Я не создаю ListFrag из FragmentA .. Я использую Фрагмент в XML-файле, а затем раздуваю этот XML-файл от FRagment A. – Vikky

+0

, тогда blackbelt, внизу, имеет решение для вас – gunar

+0

sry ....... .... что ты имеешь в виду?? – Vikky

59

В вашем фрагменте 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"); 
+0

, но я просто загружаю файл left_panel.xml в этот XML-файл, я даю имя фрагмента ... это метод, который я называю другим фрагментом ... здесь ур ответ подходит ?? – Vikky

+0

Проверьте 'onInflate()'. создайте свои собственные атрибуты, которые будут скопированы в аргументы.bundle. [link] (http://developer.android.com/reference/android/app/Fragment.html#onInflate) – Tarun

+0

sry i didnt under stand – Vikky

0

У вас есть два выбора:

A. Если я у вас есть ссылка на ваш ListFragment Вы можете установить цели фрагмент для FragmentA, выполнив следующие действия:

  1. в Fragmentathis.setTargetFragment(yourListFragment);
  2. затем this.getTargetFragment().setArguments(yourBundle);
  3. и ListFragment получить его обратно с этим this.getArguments();

B. Наиболее логический путь

Держу пари, что ваш фрагмент находится в одной и той же деятельности, поэтому у нее есть ссылки на них. Вы можете передать данные в вашей деятельности от Fragmenta и передать его ListFragment

Fragmenta --data ->FragmentActivity --data ->ListFragment

13

фрагмента Набор и получение фрагмента Аргумент:

Начальная деятельность:

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

эта работа для меня, попробуйте это может быть этот образец помочь вам.

+0

И полный фрагмент, как вы можете это сделать? – delive

+0

@ delive Я тебя не понял? можете ли вы решить свой вопрос? – sherin

+0

@delive Фрагмент A ----- "pass" ---- имя_функции (данные) -> FragmentActivity ----- "get" ---- имя_функции (строковые данные) ------> This является циклом – sherin

Смежные вопросы