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

onCreate를 이용하여 Button의 텍스트를 초기화할려고 하면 실행하자마자 바로 죽습니다..

0 추천

최소 버전 : API 14 (안드로이드 4.0)

개발 툴 : 안드로이드 스튜디오

지금 가계부 앱을 만들려고 하는데 첫화면의 Button들 중에서 1개 버튼의 텍스트를 연도와 월로 표기할려고 합니다.

그래서 버튼의 텍스트를 MainActivity의 onCreate메소드에서 setText로 변경할려고 할때 실행하면 바로 죽습니다. (반대로 그부분 주석처리하면 문제 없이 실행됩니다..)

public class MainActivity extends AppCompatActivity implements ActionBar.TabListener {
    SectionsPagerAdapter mSectionsPagerAdapter;

    ViewPager mViewPager;
    Button button;
    int YEAR = 0, MONTH = 0, DAY = 0;

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

        int[] date = DataFragment.getInstance().getDate();
        YEAR = date[0];
        MONTH = date[1];
        DAY = date[2];
        Button button = (Button)findViewById(R.id.DateBtn);
        /*  이 주석 지우고 실행하면 실행하자마자 바로 죽습니다..
            button.setText(YEAR + ". " + MONTH);
         */

        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.setDisplayOptions(actionBar.DISPLAY_SHOW_TITLE);
        actionBar.setDisplayShowHomeEnabled(false);

        mSectionsPagerAdapter = new SectionsPagerAdapter(getApplicationContext(), getSupportFragmentManager());

        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
        });

        // For each of the sections in the app, add a tab to the action bar.
        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
            // Create a tab with text corresponding to the page title defined by
            // the adapter. Also specify this Activity object, which implements
            // the TabListener interface, as the callback (listener) for when
            // this tab is selected.
            actionBar.addTab(
                    actionBar.newTab()
                            .setText(mSectionsPagerAdapter.getPageTitle(i))
                            .setTabListener(this));
        }
    }

 

intmagnet (120 포인트) 님이 2015년 9월 15일 질문

1개의 답변

0 추천
Exception 을 올리세요

예상하는건 YEAR 와 같은 값이 NULL 이거나 Button 이 xml 에 다른 형태의 class 일 가능성 정도 네요
aucd29 (218,390 포인트) 님이 2015년 9월 16일 답변
09-16 06:47:20.350    2176-2176/com.androidapp.projectab D/Date﹕ Attempt to invoke virtual method 'void android.widget.Button.setText(java.lang.CharSequence)' on a null object reference
09-16 06:47:20.350    2176-2176/com.androidapp.projectab D/Data﹕ 2015 9 16 null
첫번째는 getMessage로 나오는 것이고 두번째는 YEAR, MONTH, DAY, button의 각각 값들입니다..
Button button = (Button)findViewById(R.id.DateBtn);부분에서 id는 xml에서 지정한 id로 정확하게 잡았습니다..
Button.setText(java.lang.CharSequence)' on a null object reference
<< button id 를 다시 확인해보세요
현재 xml에서 지정한 버튼의 id와 코드 상에서 지정한 id가 같음에도 불구하고 null로 표기됩니다.. ㅠㅠ
참고로 기본적으로 안드로이드 스튜디오에서 프로젝트 생성시 지원하는 Tabbed Activity를 이용해서 Tab을 구현했고 각각의 탭의 내용은 별도의 Fragment클래스와 xml로 구성하고 있습니다..
R.layout.activity_main 에 내용을 올려보세요
...