2013-06-12 92 views
26

Tôi đang sử dụng các đoạn trong ứng dụng của mình. Đây là đoạn đầu tiên của tôi mà chỉ đơn giản thổi phồng một tập tin xml:Cách chuyển Gói từ Fragment đến Fragment

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

và đây là .xml left_panel, có chứa một đoạn:

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

Đây là lớp ListFrag tôi:

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

Tôi không biết cách vượt qua Bundle arguments từ FragmentA đến ListFrag.

Trả lời

0

Tạo một phương thức tĩnh của ListFrag trong ListFrag như:

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

Khi bạn tạo một ListFrag từ Fragment A, bạn sẽ gọi:

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

tôi không tạo ListFrag từ FragmentA .. tôi đang sử dụng Fragment trong tệp xml và sau đó thổi phồng tệp xml đó từ FRagment A. – Vikky

+0

sau đó blackbelt, bên dưới, có giải pháp cho bạn – gunar

+0

sry ....... .... ý bạn là gì?? – Vikky

59

Trong đoạn FragmentA bạn thiết lập các bó như đối số.

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

Trong đoạn ListFrag bạn nhận được bó như

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

nhưng tôi chỉ tải các tập tin left_panel.xml trong tập tin xml tôi cung cấp cho tên Fragment ... đây là phương pháp mà tôi gọi một mảnh ... ở đây ur câu trả lời là phù hợp ?? – Vikky

+0

Kiểm tra 'onInflate()'. tạo các thuộc tính của riêng bạn mà được sao chép vào arguments.bundle. [link] (http://developer.android.com/reference/android/app/Fragment.html#onInflate) – Tarun

+0

sry i didnt under stand – Vikky

0

Bạn có hai lựa chọn:

A. Nếu tôi bạn có tài liệu tham khảo của ListFragment bạn Bạn có thể đặt mục tiêu đoạn cho FragmentA bằng cách thực hiện điều này:

  1. trong FragmentAthis.setTargetFragment(yourListFragment);
  2. sau đó this.getTargetFragment().setArguments(yourBundle);
  3. và trong ListFragment có được nó trở lại với với this.getArguments();

B. Cách lôgic nhất

Tôi đặt cược mảnh của bạn là trong cùng một hoạt động để cô ấy có tài liệu tham khảo của họ. Bạn có thể truyền dữ liệu cho hoạt động của bạn từ FragmentA và vượt qua nó để ListFragment

FragmentA --Data ->FragmentActivity --Data ->ListFragment

13

Fragment để Fragment set and get Argument:

Hoạt động bắt đầu:

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

công việc này đối với tôi, cố gắng này có thể là mẫu điều này giúp bạn.

+0

Và một mảnh đầy đủ như thế nào bạn có thể làm điều đó? – delive

+0

@delive Tôi không nhận được bạn? bạn có thể làm cho câu hỏi của bạn rõ ràng? – sherin

+0

@delive Fragment A ----- "pass" ---- function_name (Dữ liệu) -> FragmentActivity ----- "get" ---- function_name (chuỗi dữ liệu) ------> Điều này là một chu kỳ – sherin

Các vấn đề liên quan