【问题标题】:Getting Null for the Button while using findViewById in Android在 Android 中使用 findViewById 时为按钮获取 Null
【发布时间】:2013-03-07 05:39:32
【问题描述】:

我在 XML 文件中创建了一个按钮,当我尝试通过 findViewById 访问该按钮时,我得到了 NullPointer 异常。

按钮的 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();

    }
}

}

【问题讨论】:

  • 检查按钮是在activity_main.xml还是在其他一些xml中
  • 请发帖activity_main.xml
  • 您发布了 main.xml,但 setContentView() 到了 activity_main.xml。那是你的问题
  • @venkat,在这里发布您的错误
  • 我只是在 Activity_main.xml 中有 Hello World。没什么大不了的。

标签: android nullpointerexception android-button


【解决方案1】:

如果您没有完全掌握布局和 xml 格式的概念,您可能需要阅读更多教程。

基本上,你只需要改变这个

setContentView(R.layout.activity_main);

到这里

setContentView(R.layout.Main);

Main 是您要使用的布局的 xml 文件的实际名称

【讨论】:

    【解决方案2】:

    @venkat,

    1. 您可以清理项目,删除 gen 文件夹并重建应用程序。这应该可以解决问题。

    2. 要获取 id,请使用 System.out.println("NextMonth Id "+NextMonth.getId());

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多