![](/img/trans.png)
[英]Android is saying that findViewById is null, whereas it is present in xml file of another activity
[英]Android Activity findviewbyid() is null
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 文件显示“按钮为空”为什么???
正如其他人所说,在调用findViewById()
之前,您没有通过setContentView()
设置布局。
为什么我需要那个?
因为Activity.findViewById()
在当前活动的视图层次结构中搜索。 如果您不设置视图层次结构,则找不到任何内容。 当这个方法没有发现任何东西时,它返回 null。
因此你应该在调用super.onCreate()
之后添加一个布局
super.onCreate(savedInstanceState);
setContentView(R.layout.yourlayout);
button = (Button) findViewById(R.id.but);
// ...
你需要设置你的布局
setContentView(R.layout.main_layout);
下一个代码解决了这个问题(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();
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.