2013-05-11 49 views
6

我在我的應用程序中有3個sherlockListFragments。每個片段都有一些editTexts,最後一個片段有一個按鈕,當它被按下時,第一個和第二個片段中的所有數據都應該被訪問和存儲。 我使用bundle在片段之間發送數據。用簡單的以下示例中, 這是我的第一片段的代碼:使用包將片段之間的數據傳遞到另一個片段示例

public class PersonalDataFragment extends SherlockListFragment { 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.fragmet_personal_data, container, false); 

    return v; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    PersonalDataFragment fragment = new PersonalDataFragment(); 
    Bundle bundle = new Bundle(); 
    bundle.putString("y", "koko"); //any string to be sent 
    fragment.setArguments(bundle); 

    super.onCreate(savedInstanceState); 
} 

} ,這是該片段的接收文本的代碼:

public class WorkExpRefFragment extends SherlockListFragment { 
String myInt; 

@Override 
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_workexp_ref, container, false); 


    final EditText t = (EditText) view.findViewById(R.id.editText5); 
    final Button generate = (Button)view.findViewById(R.id.button2); 

    generate.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      t.setText(myInt + "sadfigha"); 
     } 
    }); 
    return view; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    Bundle bundle = this.getArguments(); 
    if(getArguments()!=null) { 
     myInt = getArguments().getString("y"); 
    } 

    super.onCreate(savedInstanceState); 
} 

}

現在我在第三個片段中有空,我該怎麼辦? 在此先感謝

回答

6

這是正常的,您的代碼失敗。在第一個片段中,您所做的只是創建一個新的PersonalDataFragment實例,並將該數據傳遞給Bundle。問題是雖然片段Bundle中保存了數據,但片段本身並不是應用程序使用的(甚至不連接到Activity)。您還可以將Bundle設置爲PersonalDataFragment實例,但您嘗試訪問WorkExpRefFragment中的數據,這顯然不起作用,因爲這兩個片段沒有直接連接。

你想要做的一個簡單的解決方案是讓Activity「保存」片段的數據,因爲Activity可用於所有片段。首先在Activity創建兩個方法抱着三個片段:

public void saveData(int id, Bundle data) { 
    // based on the id you'll know which fragment is trying to save data(see below) 
    // the Bundle will hold the data 
} 

public Bundle getSavedData() { 
    // here you'll save the data previously retrieved from the fragments and 
    // return it in a Bundle 
} 

那麼你的片段將節省他們的數據是這樣的:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    YourActivity activity = (YourActivity) getActivity(); 
    Bundle savedData = activity.getSavedData(); 
} 

public class PersonalDataFragment extends SherlockListFragment { 

    // this will identify the PersonalDataFragment fragment when trying to save data 
    public void static int id PERSONAL_ID = 1; 
    //... 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Bundle bundle = new Bundle(); 
     bundle.putString("y", "koko"); //any string to be sent 
     YourActivity activity = (YourActivity) getActivity(); 
     activity.saveData(PERSONAL_ID, bundle); 
    }  
} 

要在WorkExpRefFragment片段檢索數據

根據您使用這些碎片的方式,此解決方案可能無法正常工作。另請注意,您通過的Bundle不會因配置更改而保留。

+0

感謝您的回覆,它適用於我,但我需要它獲取數據時按鈕(在第三個碎片中)按下不當第一個碎片。被建造。我希望它保留配置更改。 那麼,我該怎麼辦? – Fareed 2013-05-11 19:26:34

+0

我知道了,並addTextChanged listiner :) 謝謝 – Fareed 2013-05-11 19:57:54

相關問題