मैं हाल ही में टुकड़े का उपयोग कर जो इस तरह दिखता है एक डेमो एप्लिकेशन बनाया है शुरू कर दिया है:टुकड़ों के समान उदाहरण को कैसे सहेजने और पुन: उपयोग करने के लिए?
टुकड़ा 1 के बीच प्रत्येक बटन स्विच परक्लिक करना, टुकड़ा 2 और खंड 3.
मैं क्या कर रहा हूँ पूरा करने की कोशिश करना केवल प्रत्येक टुकड़े का 1 उदाहरण है और इसका पुन: उपयोग करना है। (कृपया ध्यान दें कि सभी टुकड़े बनाए गए हैं और गतिशील रूप से जोड़े गए हैं)। वर्तमान में मैं इसे टुकड़े का हैश मैप बनाकर और प्रत्येक उदाहरण को रखकर और वहां से इसे पकड़कर कर रहा हूं।
तो मेरे प्रश्न हैं: क्या ऐसा करने का एक बेहतर तरीका है: FragmentManager की putFragment (...) विधि का उपयोग करके? putFragment (Bundle bundle, String key, Fragment fragment)
मैं यह नहीं समझ सकता कि मेरे मामले में इसका उपयोग कैसे किया जाए। अगर कोई मुझे इस विधि का उपयोग करने का उदाहरण दे सकता है।
क्या यह मेरी गतिविधि में प्रत्येक टुकड़े के संदर्भ में पकड़ना महंगा है? क्या यह सभी टुकड़ों को जीवित रखता है? मैं इससे निपटने के लिए नरम संदर्भ का उपयोग कर रहा हूं लेकिन मुझे यकीन नहीं है कि यह करने का यह सही तरीका है या नहीं। कृपया मुझे ऐसा करने के किसी भी वैकल्पिक तरीके की ओर इशारा करें या मुझे यह बताने दें कि यह पूरा करने का यह सबसे अच्छा तरीका है या नहीं।
अग्रिम धन्यवाद।
अद्यतन: मैं वापस ढेर से टुकड़े पुन: उपयोग करने, की कोशिश कर रहा है, तो इसे वापस ढेर में मौजूद नहीं है केवल उन्हें जोड़ने कोशिश कर रहा हूँ
यहाँ मेरी कोड है।
10-28 13:21:40.255: ERROR/MessageQueue-JNI(3548): java.lang.IllegalStateException: Fragment already added: FragmentOne{423db570 #0 id=0x7f050006 fragOne}
public class MainActivity extends Activity implements View.OnClickListener {
private Button btnOne;
private Button btnTwo;
private Button btnThree;
/* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initialize();
if(findViewById(R.id.fl) != null){
if(savedInstanceState != null)
return;
}
FragmentManager.enableDebugLogging(true);
updateView("fragOne");
}
private void initialize(){
btnOne = (Button) findViewById(R.id.button1);
btnTwo = (Button) findViewById(R.id.button2);
btnThree = (Button) findViewById(R.id.button3);
btnOne.setOnClickListener(this);
btnTwo.setOnClickListener(this);
btnThree.setOnClickListener(this);
fragHolder = new HashMap<String, SoftReference<Fragment>>();
}
private void updateView(String tag){
FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment frag = getFragmentManager().findFragmentByTag(tag);
boolean addToStack = true;
if(frag == null){
if(tag.equals("fragOne"))
frag = new FragmentOne();
else if(tag.equals("fragTwo"))
frag = new FragmentTwo();
else if(tag.equals("fragThree"))
frag = new FragmentThree();
}else{
//Don't add to back stack
addToStack = false;
}
ft.replace(R.id.fl, frag, tag);
if(addToStack)
ft.addToBackStack(null);
ft.commit();
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1:
updateView("fragOne");
break;
case R.id.button2:
updateView("fragTwo");
break;
case R.id.button3:
updateView("fragThree");
break;
}
}
}
क्या आपने FragmentTransactions में देखा है? वे आपके लिए सहायक हो सकते हैं। –