는 최근 다음과 같습니다 데모 응용 프로그램을 만든 조각을 사용하기 시작했다 :조각의 동일한 인스턴스를 저장하고 재사용하는 방법은 무엇입니까?
조각 1 사이의 각 버튼 스위치에클릭, 조각 2, 조각 3. 내가 무엇
달성을 시도하는 것은 각 단편의 인스턴스를 1 개만 가지고 재사용하는 것입니다. (모든 단편은 동적으로 작성되고 추가됩니다. 현재 나는 프래그먼트의 HashMap을 생성하고 각 인스턴스를 배치하고 거기에서 그것을 잡아서이 작업을 수행하고 있습니다.
내 질문은 : 더 좋은 방법이 있나요 : FragmentManager의 putFragment (...) 메서드를 사용하여? putFragment (Bundle bundle, String key, Fragment fragment)
내 경우에 어떻게 사용하는지 알아낼 수 없습니다. 누구든지이 방법을 사용하는 방법에 대한 예를 들어 줄 수 있다면.
내 활동에서 각 조각에 대한 참조를 보유하는 것이 비용이 많이 듭니까? 이것은 모든 조각들을 살아있게합니까? 이 문제를 해결하기 위해 소프트 참조를 사용하고 있지만 이것이 올바른 방법인지 확실하지 않습니다. 이 작업을 수행하는 가장 좋은 방법인지 알고 싶다면이 작업을 수행 할 다른 방법을 알려주십시오.
미리 감사드립니다.
UPDATE : 나는 그것이 다시 스택에 존재하지 않는 경우에만 추가하려고, 다시 스택에서 조각을 다시 사용하려고
여기 내 코드입니다.
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를 살펴 보았습니까? 그들은 당신에게 도움이 될 수 있습니다. –