7
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;

public class FileExplorerActivity extends Activity 
{
    public static final String TAG="ricky";
    Button button;
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        button = (Button) findViewById(R.id.but);<<<------------------
        if(button == null)
        Log.d(TAG, "FileExplorerActivity: button is null");
    }
    public FileExplorerActivity()
    {
       Log.d(TAG, "FileExplorer: constructor()");
    }
}

这是一个简单的 Activity,它被另一个使用 Intent 的 Activity 带到前面

Intent openFileBrowser = new Intent(this, FileExplorerActivity.class);
try
{
    startActivity(openFileBrowser); 
}

运行代码后,我的 LogCat 文件显示“按钮为空”为什么?

4

3 回答 3

18

正如其他人所说,您setContentView() 调用findViewById().

为什么我需要那个?

因为Activity.findViewById()在当前活动的视图层次结构中搜索。如果您不设置视图层次结构,则找不到任何内容。当这个方法什么也没找到时,它返回 null。

因此,您应该在调用后添加一个布局super.onCreate()

super.onCreate(savedInstanceState);
setContentView(R.layout.yourlayout);

button = (Button) findViewById(R.id.but);
// ... 
于 2012-05-24T10:48:11.167 回答
1

您需要设置布局

setContentView(R.layout.main_layout);
于 2012-05-24T10:43:35.593 回答
0

下一个代码解决了这个问题(Xamarin Android)

public class MainActivity : WearableActivity
{
    ...

    OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        **SetContentView(Resource.Layout.RoundMain);**

        // Does not return null anymore:

        FindViewById<Button>(Resource.Id.ButtonVgOk).LongClick += (s, e) => ButtonVgOkOnLongClick();

        ...
   }
于 2017-11-16T20:26:42.653 回答