2013-03-07 4 views
-4

XML 파일에 버튼을 만들었고 findViewById를 통해 버튼에 액세스하려고하는 동안 NullPointer 예외가 발생했습니다.안드로이드에서 findViewById를 사용하는 동안 버튼이 null이 됨

R.java 파일에 버튼이 생성되었습니다. 하지만 여전히 findViewById 메서드를 통해 얻을 수 없습니다.

main.xml에 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<com.example.calendar_module.CalendarView android:id="@+id/calendar" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

<Button 
    android:id="@+id/NextMonth" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Next"/> 

</LinearLayout> 

MainActivity.java :

public class MainActivity extends Activity { 

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

    // 1) start calendar view 
      //  startActivityForResult(new Intent(Intent.ACTION_PICK).setDataAndType(null, CalendarActivity.MIME_TYPE), 100); 
    startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(null, CalendarActivity.MIME_TYPE)); 
    final CalendarView calenderView = new CalendarView(this); 

    //   Calendar calendarView = Calendar.getInstance(); 
// 
//  Uri uriCalendar = Uri.parse("content://com.android.calendar/time/" + String.valueOf(System.currentTimeMillis())); 
//   Intent intentCalendar = new Intent(Intent.ACTION_VIEW,uriCalendar); 
// 
//   //Use the native calendar app to view the date 
//   startActivity(intentCalendar); 

    Button NextMonth = (Button) findViewById(R.id.NextMonth); 

    System.out.println("NextMonth Id "+NextMonth); 

    NextMonth.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      calenderView.nextMonth(); 

     } 
    }); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

    // 2) implement your own onActivityResult method to handle returned date 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(resultCode==RESULT_OK) { 
     int year = data.getIntExtra("year", 0); // get number of year 
     int month = data.getIntExtra("month", 0); // get number of month 0..11 
     int day = data.getIntExtra("day", 0);  // get number of day 0..31 

     // format date and display on screen 
     final Calendar dat = Calendar.getInstance(); 
     dat.set(Calendar.YEAR, year); 
     dat.set(Calendar.MONTH, month); 
     dat.set(Calendar.DAY_OF_MONTH, day); 

     // show result 
     SimpleDateFormat format = new SimpleDateFormat("yyyy MMM dd"); 
     Toast.makeText(MainActivity.this, format.format(dat.getTime()), Toast.LENGTH_LONG).show(); 

    } 
} 

} 
+0

수표를 사용하려는 레이아웃 XML 파일의 실제 이름이

setContentView(R.layout.Main); 

setContentView(R.layout.activity_main); 

을 변경해야 버튼이'activity_main.xml' 또는 다른 XML에 있습니다 – Deepzz

+0

'activity_main.xml' –

+0

(main.xml을 게시했지만 setContentView()가 작동하도록 게시하십시오) ivity_main.xml. 그게 너의 문제 야. – ElefantPhace

답변

0

를 사용 얻으려면.

기본적으로, 당신은 단지 Main 당신이 있는지 여부

-1

@venkat, 당신이 프로젝트를 청소 세대 폴더를 삭제하고 응용 프로그램을 다시 만들 수 있습니다

  1. . 이렇게하면 문제가 해결됩니다.

  2. 는 ID 당신은 완전히 레이아웃의 개념 및 XML 형식을 파악하지 않으면 몇 자습서를 읽어 들일 필요가 있습니다 System.out.println("NextMonth Id "+NextMonth.getId());

+0

이것은 대답이 아닙니다 ... 그리고 당신은 틀린 BTW입니다. – ElefantPhace

관련 문제