2013-03-07 45 views
-4

我在XML文件中創建了一個按鈕,而當我試圖通過findViewById訪問按鈕時,我得到的是空指針異常。在Android中使用findViewById時獲取按鈕的空值

Id是用於在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文件的實際名稱按鈕在'activity_main.xml'或其他xml – Deepzz 2013-03-07 05:41:17

+0

請發佈'activity_main.xml' – 2013-03-07 05:41:38

+0

您發佈了main.xml,但setContentView() ivity_main.xml。這是你的問題 – ElefantPhace 2013-03-07 05:42:35

回答

0

您可能需要閱讀一些更多的教程,如果你不完全掌握佈局的概念和XML格式。

基本上,你只需要這個

setContentView(R.layout.activity_main); 

改變這種

setContentView(R.layout.Main); 

其中Main是要使用

-1

@venkat,

  1. 可以清理項目,刪除根文件夾,並重建應用程序。這應該解決這個問題。

  2. 要獲得ID使用System.out.println("NextMonth Id "+NextMonth.getId());

+0

這不是一個答案...你錯了順便說一句 – ElefantPhace 2013-03-07 05:43:09