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

버튼 클릭시 버튼을 동적생성하는 코드

0 추천
btnStart 버튼을 누르면 새로운 버튼이 생기는 프로그램을 짜려고 합니다.
btnStart_Click메소드에서 버튼을 생성해준뒤 뷰에 view.addView(btn); 이 코드를 써서 뷰에 추가시켜 주어야 하는것으로 알고있는데
view.addView(btn); 코드의 addView에 오류가 뜹니다 ㅜ 어느부분이 잘못되었나요?





public class MainActivity extends AppCompatActivity {
    int ix = 8; int iy = 8; int mine = 8;
    Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AbsoluteLayout manager = (AbsoluteLayout) findViewById(R.id.AbsLay);

        Button button = (Button)findViewById(R.id.btnStart);
        button.setText("시작하기");

    }

    public void btnStart_Click(View view) {
        Button btn = new Button(context);
        btn.setText("새로만든 버튼");
view.addView(btn);
        //
    }
}


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

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:id="@+id/AbsLay">


    <Button
        android:id="@+id/btnStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="153dp"
        android:layout_y="8dp"
        android:text="시작"
        android:onClick="btnStart_Click"/>



</AbsoluteLayout>
Cro0515 (240 포인트) 님이 2019년 6월 3일 질문

1개의 답변

0 추천

view.addView(btn) 에서 앞의 view는 btnStart 버튼입니다.

버튼에 버튼을 add할 수 없으니 오류가 나지요.

AbsoluteLayout에 addView 하세요. (manager.addView(btn))

manager는 전역 처리 하거나 btnStart_Click 에 정의하세요.

얼룩얼룩 (890 포인트) 님이 2019년 6월 3일 답변
정말 감사합니다. 역시 view가 가르키는건 버튼이였군요...
manager만 전역처리하고 onCreate에서 값을 할당해주는식으로 처리했습니다.
실행해보니 버튼클릭시 오류로 중지되길래 context가 문제인것같아
구글링으로 찾아본 결과 context를 onCreate에서 context = this; 로 할당해주니까 잘 생성되더군요 ㅎㅎ

감사합니다. 덕분에 잘 해결했습니다. c#과 윈도우 폼을 기반으로 배우고 자바와 안드로이드를 배우는중인데 코드는 c#과 자바가 비슷한데 gui와의 연동 부분에서는 좀 많은 차이가있네요 ㅎㅎ 좀 더 많이 공부해야겠습니다 ㅠ
...