2

저는 비교적 안드로이드에 익숙하지 않으며 내 사용자 정의보기에서 프로그래밍 방식으로 정의 된 상대 레이아웃 (단편에 정의 됨)에 액세스하는 방법에 완전히 매달 렸습니다. 조각에서 사용자 정의보기에서 RelativeLayout에 액세스 할 때 NullPointerException이 발생했습니다.

이 내가 가진 무엇 :
... 
    @Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment1, container,false); 
    RelativeLayout rl1 = new RelativeLayout(view.getContext()); 
    TextView tView1 = new TextView(view.getContext()); 
    tView1.setText("test"); 
    rl1.addView(tView1); 
    rl1.setId(1); 
    tView1.setId(2); 
... 
} 

그런 다음 사용자 지정보기에 내가 ID로 상대 레이아웃 및 텍스트 뷰를 호출합니다. 아무것도하려고하면 NullPointer 예외가 발생합니다.

... 
RelativeLayout rl1 = (RelativeLayout) findViewById(1); 
TextView tView1 = (TextView) findViewById(2); 
tView1.getText(); 

코드는 위의 텍스트 뷰에 .getText()에 노력을 보여줍니다,하지만 난 RelativeLayout의에 할 아무것도 또한 NullPointer 예외가 발생합니다.

그래서 기본적으로 RelativeLayout 및 TextViews가 올바르게 표시되지 않는 것 같습니다. FYI, 이미 this similar question을 보았습니다. 그러나 여기서는 적용되지 않았습니다. 내 생성자는 이미 적절하게 설정되어 있습니다. ,

+0

좋아, 더 많은 코드를 추가했습니다. 추가 할 특정 명령/파일 유형을 알려주시겠습니까? 'view.addView (rl1)'과 같은가요? 아니면 이것을 Fragment1의 .xml 파일에 추가합니까? – lynvie

+1

내 대답보기. 이 동적 인 것을 유지하고 싶다면 xml은 프래그먼트 레이아웃의 초기 팽창 외에 실제로 관련되지 않는다. 필자가 작성한 것처럼,'addView()'는'View' 클래스에 대해 정의되지 않았기 때문에 레이아웃으로 변환해야합니다. –

답변

1

메인 뷰에 레이아웃을 추가해야 액세스 할 수 있습니다 당신이 외부 onCreateView()onCreateView() has already been called:

RelativeLayout rl1 = (RelativeLayout) getView().findViewById(1); 
TextView tView1 = (TextView) rl1.findViewById(2); 
tView1.getText(); 
01을 작업하는 경우, 액세스 그리고

YourLayout view = (YourLayout) inflater.inflate(R.layout.fragment1, container,false); 
RelativeLayout rl1 = new RelativeLayout(view.getContext()); 
TextView tView1 = new TextView(view.getContext()); 
tView1.setText("test"); 
rl1.addView(tView1); 
rl1.setId(1); 
tView1.setId(2); 
view.addView (rl1);//add rl1 to the main View 

: 그러나, 당신은 레이아웃에 먼저 캐스팅해야

onCreateView()의보기에 계속 액세스하려는 경우 findViewById()은 중요하지 않습니다. 이미보기에 대한 참조가 있으므로이보기를 사용하십시오.

청취자 등을 추가하여 onCreateView()에 UI를 업데이트 할 수 있다는 것도 주목할 가치가 있습니다. 따라서 약간의 일을 할 수 있습니다.

+1

당신은 나에게 매우 정중하게 물건을 정리했습니다! 얼마나 많은 시간을 낭비했는지 말해 줄 수는 없네. – lynvie

+0

@lynvie 환영합니다 :-) –

1

당신은 당신의 레이아웃 그룹으로 상대 레이아웃을 추가 할 필요가 ... 그리고 레이아웃의 상위 뷰에서 당신은 당신의 상대 레이아웃과 차일