![](/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.