마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

LinearLayout null 값을 찾지 못하고 있습니다. [closed]

0 추천

   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.addView(android.view.View)' on a null object reference
        at com.google.ar.sceneform.samples.imagetexture.MainActivity.InitializerGallery(MainActivity.java:76)
        at com.google.ar.sceneform.samples.imagetexture.MainActivity.onCreate(MainActivity.java:58)

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/sceneform_fragment"
        android:name="com.google.ar.sceneform.ux.ArFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/gallery_layout"
        app:layout_constraintVertical_chainStyle="spread"
        app:layout_constraintVertical_weight="9"
        />

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/arFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</FrameLayout>

 

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    fragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.sceneform_fragment);

    getSupportFragmentManager().addFragmentOnAttachListener((fragmentManager, fragment) -> {
        if (fragment.getId() == R.id.arFragment) {
            arFragment = (ArFragment) fragment;
            arFragment.setOnTapArPlaneListener(MainActivity.this);
        }
    });

    if (savedInstanceState == null) {
        if (Sceneform.isSupported(this)) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.arFragment, ArFragment.class, null)
                    .commit();
        }
    }
//원인이 되는 부분
    InitializerGallery();

    loadModel();
    loadTexture();
}
 private void InitializerGallery(){

        LinearLayout gallery = findViewById(R.id.gallery_layout);

        ImageView sun = new ImageView(this);

        sun.setImageResource(R.drawable.chair_thumb);
        sun.setContentDescription("sun");
//        sun.setOnClickListener(view -> {selectedObject = "chair";});

        System.out.println(sun);
        gallery.addView(sun);

    }

 

원인이 되는 부분은 gallery.addView같은데 아무리봐도 null값이 나오는게 이해가 되질 않습니다.

문제가 되는 부분이 있을까요? 어제부터 고생하고 있습니다 ㅠ

 

파일구조

질문을 종료한 이유: LinearLayout 추가
촙보 (120 포인트) 님이 2022년 5월 29일 질문
촙보님이 2022년 5월 29일 closed
올리신 레이아웃 파일과 프레그먼트 관련 코드를 보니 일반적으로는 사용하지않는 구조로 보여지네요. 왜 프레그먼트를 두개를 사용하고 하나는 height="0p"인지. 그리고 프레그먼트의 ID 를 왜 비교해서 안전하지 않는 방법으로 형변환을 하고 있는지 등등 의문이 많이 드는 코드네요.
...