2014-04-26 7 views
0

나는 안드로이드 개발에 익숙하다. 그래서 이것은 매우 간단 할 것이다. 그러나, 나는 나를 위해 일한 것을 찾을 수 없었다.프로그래밍 방식으로 추가 된 참조 Framelayout (Android)

내가 성공적으로 다음 코드를 통해 선형 레이아웃에 여러 framelayouts를 추가 관리했습니다

: 나중에 프로그램에서 나는이 framelayouts를 참조하고 싶습니다 어떤 시점에서 그래서

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    LinearLayout fragmentContainer=(LinearLayout) findViewById(R.id.fragment_container); 
    fragmentContainer.setOrientation(LinearLayout.VERTICAL); 


    //if (findViewById(R.id.fragment_container) != null) { 

    for(int i=1;i<10;i++){ 
     //create a new TextFrag object 
     TextFrag textFragment=new TextFrag(); 

     //pass arguments to the textFrag Object with the Fragment Number 
     Bundle args=new Bundle(); 
     args.putInt("FragNumber", i); 
     textFragment.setArguments(args); 

     //Create a new Frame Layout for Each Fragment. This is useful if you want to switch fragments at runtime 
     //Dont know exact details yet 
     FrameLayout fragmentFrame=new FrameLayout(this); 
     //set a unique id for the FrameLayout 
     fragmentFrame.setId(i); 

     //Define the Frame Layout Params 
     FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); 




     //Add the Fragment to the Frame Layout 
     getSupportFragmentManager().beginTransaction().add(fragmentFrame.getId(),textFragment).commit(); 



     //Add the Frame Layout to the Linear Layout 
     fragmentContainer.addView(fragmentFrame); 


    } 



} 

하고 난 이후 생각 getViewById를 사용할 수있는 ID를 알고있었습니다.

이것은 제대로 작동하지 않습니다. 나는 약간 아래로 testFrame라는 중복 FrameLayout이 객체를 추가하여 위의 코드를 수정했습니다

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    LinearLayout fragmentContainer=(LinearLayout) findViewById(R.id.fragment_container); 
    fragmentContainer.setOrientation(LinearLayout.VERTICAL); 


    //if (findViewById(R.id.fragment_container) != null) { 

    for(int i=1;i<10;i++){ 
     //create a new TextFrag object 
     TextFrag textFragment=new TextFrag(); 

     //pass arguments to the textFrag Object with the Fragment Number 
     Bundle args=new Bundle(); 
     args.putInt("FragNumber", i); 
     textFragment.setArguments(args); 

     //Create a new Frame Layout for Each Fragment. This is useful if you want to switch fragments at runtime 
     //Dont know exact details yet 
     FrameLayout fragmentFrame=new FrameLayout(this); 
     //set a unique id for the FrameLayout 
     fragmentFrame.setId(i); 

     //Define the Frame Layout Params 
     FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); 

     //CHANGED CODE STARTS HERE 

     int theId=i; 

     FrameLayout testFrame=(FrameLayout) findViewById(theId); 

     if(testFrame!=null){ 

     //Add the Fragment to the Frame Layout 
     getSupportFragmentManager().beginTransaction().add(testFrame.getId(),textFragment).commit(); 



     //Add the Frame Layout to the Linear Layout 
     fragmentContainer.addView(testFrame); 
     } 

     //CHANGED CODE ENDS HERE 

    } 



} 

을 그래서 기본적으로 testFrame 객체가 이제 널이기 때문에 더 이상 framelayouts 전혀 표시되지 않습니다. 내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

+0

문제는 이전에 루프 ID **로 ** FrameLayout을 찾고 컨테이너에'FrameLayout'을 추가하는 것입니다 ('fragmentContainer.addView (testFrame);) 어떤보기를 찾을 수 없습니다. – Luksprog

+0

와우 덕분에 일했습니다! 그에 맞게 답변 할 수 있도록 게시 할 수 있습니까? – RohanC

답변

0

답변 덕분에 Luksprog에게 감사드립니다. 요소를 간단히 만들고 id를 할당하는 것만으로는 충분하지 않습니다. R 파일에서 참조되는 기존 뷰에 추가해야합니다. 제 경우에는 기존 뷰는 R.id.fragment_container였습니다