findViewById에서 많은 스레드를 읽었으므로 사용자 정의 클래스에 대해 null을 반환하고 정확하게 오류를 찾을 수 없습니다. 조각 (LinearLayout)을 부 풀리는 주요 활동이 있습니다. 이 LinearLayout에 핸들러를 사용하여 여러 개의 사용자 정의 ImageView를 채우고 싶습니다. 핸들러는 기본적으로 각 사용자 정의 ImageView를 만들고이를 ArrayList에 저장합니다.이 ArrayList는 주 활동에서 읽을 수 있습니다. 내 사용자 지정 이미지 뷰에서findViewById는 핸들러 클래스를 사용하여 사용자 정의 ImageView에 대해 null을 반환합니다.
나는 다음과 같은 생성자를 가지고 : 나는 경우 테스트하기 위해 다음을 수행 내 주요 활동에서
customViews = new ArrayList<CustomView>();
for (int k = 0; k < numberOfCustomViews; k++){
CustomView w = new CustomView(ctx,
scanner.nextInt(), //ID
scanner.next(), //Color
scanner.next(), //Size
scanner.nextInt(), //Relative ID
scanner.nextInt(), //Relative angle
scanner.nextFloat(), //Absolute x (percent)
scanner.nextFloat(), //Absolute y (percent)
new int[] {scanner.nextInt(), //Dependence numbers
scanner.nextInt()});
customViews.add(w);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
w.getSizeAsResource(), w.getSizeAsResource());
w.setLayoutParams(lp);
Log.d(TAG, "CustomView added!");
}
:
public CustomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomView(Context context, int ID, String c, String s, int relID, int relAngle,
Float absX, Float absY, int [] inNumbers) {
super(context);
this.setId(ID);
color = c;
size = s;
x_pos = absX;
y_pos = absY;
dependence = inNumbers;
rel_id = relID;
rel_angle = relAngle;
}
그럼 내 핸들러 클래스에 나는 다음을 수행 첫 번째 CustomView를 사용할 수 있습니다.
customViewTest = (CustomView) (findViewById(customViewHandler.customViews.get(1).getId()));
if (customViewTest == null)
Toast.makeText(this, "customViewTest == null", Toast.LENGTH_LONG).show();
항상 축배를 보여줍니다. 내가 여기서 무엇을 놓치고 있니? 부풀어 오르거나 뭔가가 필요합니까? 프로그래밍 방식으로 레이아웃에 사용자 정의보기를 추가 할 수 있어야합니다.
내 코드에서 사용자 지정 ImageViews를 추가하지 않는 이유는 nullPointerExceptions을 생성하기 때문입니다. 그들이 주 활동에서 null인지 아닌지를 확인하는 대신, (ViewViewById를 사용하여) 사용 가능한 ViewGroup에 추가하고 싶습니다. 내 Fragment의 ViewGroup을 채울 때 정의에 따라 사용자 정의 ImageViews가 고아라고 말하지만, 내가 필요로하는 위치에서 고아가 null이므로이 작업을 수행 할 수 없습니다. –