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

setContentView 대신에 inflate만 하면 안 되나요?

0 추천

Activity를 상속한 클래스에서 setContentView를 안 쓰고 inflate만으로

텍스트뷰에 setText()를 할 수는 없는가요? 아니면 최소한 에러는 발생되지 않아야 되지 않나요?

Activity를 상속하지 않은 클래스에서는 setContentView를 쓰지 않아도 화면 출력까지 되던데 말이죠.

(예, public class SingleItemView extends LinearLayout )

>> 아직도 제가 확실한 개념이 안 잡힌 것 같아 도움 바랍니다.

-----------------------------------------------------------------------------------------------

// 현재 xml에 TextView가 하나 있음.  

public class MainActivity extends AppCompatActivity {    // Activity 상속

     @Override
     protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
          // setContentView(R.layout.activity_main);
      
         LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

         View v = (View)inflater.inflate(R.layout.activity_main, null);

          // setContentView(v);  여기에 이렇게 작성하면 문제는 없는데요.


        TextView txtView = (TextView)findViewById(R.id.textView);
         txtView.setText("안녕"); // <질문> 왜 이것이 에러나 나는지 모르겠네요.. null object라고 나오네요.

                                          // 화면에 보이지는 않더라도 에러는 없어야 되지 않나하는 생각인데, 무엇이 문제일까요???

     }

}

앞바퀴 (280 포인트) 님이 2019년 2월 8일 질문

2개의 답변

+1 추천
 
채택된 답변
Textview txtView = (TextView)v.findviewById(R.id.textView);

txtView.setText("안녀엉");
구시포 (2,750 포인트) 님이 2019년 2월 8일 답변
앞바퀴님이 2019년 2월 9일 채택됨
답변에 정말 감사드립니다~
+1 추천

setContentView 는 Activity에 보일 view를 설정하는 역활을 합니다.

이에 반해 inflater.inflate 는 xml에서 view를 구하는 역활 만을 합니다.

그래서   inflater.inflate  로 구한 view를 화면에 보이려면, 

setContentView(v); 같은 것을 호출 해서 Activity 에서 해당 view를 사용하도록 설정 해 주셔야 합니다

 

 

익명사용자 님이 2019년 2월 8일 답변
...