2013-06-12 19 views
26

Sto usando i frammenti nella mia applicazione. Questo è il mio primo frammento che semplicemente gonfiare un file xml:Come passare il pacchetto da un frammento a un frammento

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

e questo è il .xml left_panel, che contiene un frammento:

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

Questa è la mia classe 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"); 
} 
} 

Non so come passare Bundle arguments da FragmentA a ListFrag.

risposta

0

Creare un metodo statico di ListFrag in ListFrag quali:

public static ListFrag newInstance(int doctorId) { 
    ListFrag frag = new ListFrag(); 
    Bundle args = new Bundle(); 
    args.putExtra("doctor_id", doctorId); 
    frag.setArguments(args); 
    return frag; 
} 

Quando si crea un ListFrag dal frammento A, si potrebbe chiamare:

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

io non sto creando ListFrag da Fragmenta .. Sto usando Frammento nel file XML e quindi gonfiare il file XML dal frammento A. – Vikky

+0

poi blackbelt, al di sotto, ha la soluzione per voi – gunar

+0

sry ....... .... che intendi?? – Vikky

59

Nel vostro frammento Fragmenta impostare il pacchetto come l'argomento.

Bundle args = new Bundle(); 
args.putInt("doctor_id",value);  
ListFrag newFragment = new ListFrag(); 
newFragment.setArguments(args); 

Nel vostro frammento ListFrag ottenere il bundle come

Bundle b = getArguments(); 
int s = b.getInt("doctor_id"); 
+0

ma mi limito a caricare il file left_panel.xml in quel file xml ho dato il nome Fragment ... questo è il metodo che sto chiamando un altro frammento ... qui la risposta è adatta ?? – Vikky

+0

Controlla 'onInflate()'. crea i tuoi attributi che vengono copiati in arguments.bundle. [link] (http://developer.android.com/reference/android/app/Fragment.html#onInflate) – Tarun

+0

sry non ha funzionato sotto stand – Vikky

0

Hai due scelta:

A. Se vi ho di riferimento del vostro ListFragment È possibile impostare bersaglio framment per FragmentA facendo così:

  1. in Fragmentathis.setTargetFragment(yourListFragment);
  2. poi this.getTargetFragment().setArguments(yourBundle);
  3. e in ListFragment riaverla con con this.getArguments();

B. Il modo più logica

Scommetto che il tuo frammento è nella stessa attività in modo che abbia riferimenti a loro. È possibile passare i dati alla vostra attività da fragmenta e passarlo al ListFragment

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

13

Frammento di Frammento impostato e ottieni argomento:

Inizio attività:

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

questo lavoro per me, provate questo può essere questo campione aiuto.

+0

E un frammento completo come puoi farlo? – delive

+0

@delive Non ti ho preso? puoi chiarire la tua domanda? – sherin

+0

@delive Fragment A ----- "pass" ---- function_name (Data) -> FragmentActivity ----- "get" ---- function_name (string data) ------> Questo è un ciclo – sherin

Problemi correlati