2013-06-12 122 views
26

我在我的應用程序中使用片段。這是我簡單地誇大一個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。

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

當您從片段A一ListFrag,你會打電話:

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

回答

0

在ListFrag如創建ListFrag的靜態方法爭論。

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

我不是從FragmentA創建ListFrag ..我在XML文件中使用的片段,然後從膨脹A.片段是XML文件 – Vikky

+0

黑帶然後下面,對你 – gunar

+0

SRY解決....... .... 你什麼意思?? – Vikky

59

在你FragmentA片段設置束爲

+0

但我只是加載該XML文件中的left_panel.xml文件我給片段名稱...這是我調用另一個片段的方法...在這裏你的答案是合適的? – Vikky

+0

查看'onInflate()'。創建 將自己的屬性複製到arguments.bundle中。 [鏈接](http://developer.android.com/reference/android/app/Fragment.html#onInflate) – Tarun

+0

sry我沒有站在 – Vikky

0

你有兩個選擇:

答:如果我你有你的ListFragment參考 您可以設定目標片段用於FragmentA:

  1. FragmentAthis.setTargetFragment(yourListFragment);
  2. 然後this.getTargetFragment().setArguments(yourBundle);
  3. ListFragment在與this.getArguments();

B.找回來,最邏輯的方式

我敢打賭,你的片段是在同一個活動,所以她有他們的參考。 您可以從FragmentA數據傳遞到您的活動,並把它傳遞給ListFragment

FragmentA - 數據 - >FragmentActivity - 數據 - >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 Fragment A -----「pass」---- function_name(Data) - > FragmentActivity -----「get」---- function_name(string data)------> This是一個循環 – sherin

相關問題