나는 안드로이드 개발에 익숙하다. 그래서 이것은 매우 간단 할 것이다. 그러나, 나는 나를 위해 일한 것을 찾을 수 없었다.프로그래밍 방식으로 추가 된 참조 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 전혀 표시되지 않습니다. 내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?
문제는 이전에 루프 ID **로 ** FrameLayout을 찾고 컨테이너에'FrameLayout'을 추가하는 것입니다 ('fragmentContainer.addView (testFrame);) 어떤보기를 찾을 수 없습니다. – Luksprog
와우 덕분에 일했습니다! 그에 맞게 답변 할 수 있도록 게시 할 수 있습니까? – RohanC