我正在尝试扩展一个活动,该活动可以处理将在项目的每个活动中进行的工具栏初始化。
在此ToolbarActivity
中,当我尝试使用findViewById
时,它将返回null
。
我在这个网站上看了很多主题,但似乎没有一个主题能给我正确答案:
这是我的代码:
public abstract class ToolBarActivity : AppCompatActivity
{
private DrawerLayout _drawerLayout;
private ListView _mLeftDrawer;
private SupportToolBar _mToolBar;
private MyActionBarDrawerToggle _mDrawerToggle;
private List<Tuple<string, int>> _items;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
int layout = GetLayoutResource();
SetContentView(layout);
InitToolBar(savedInstanceState);
}
/// <summary>
/// Initialize the Toolbar and the leftDrawer
/// </summary>
/// <param name="savedInstanceState"></param>
private void InitToolBar(Bundle savedInstanceState)
{
_mToolBar = FindViewById<SupportToolBar>(Resource.Id.toolBarMenu);
_drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawerLayout1);
_mLeftDrawer = FindViewById<ListView>(Resource.Id.listviewleft);
InitListView();
SetSupportActionBar(_mToolBar);
_mDrawerToggle = new MyActionBarDrawerToggle(this, _drawerLayout, Resource.String.openDrawer,
Resource.String.Messages);
_drawerLayout.AddDrawerListener(_mDrawerToggle);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
SupportActionBar.SetHomeButtonEnabled(true);
_mDrawerToggle.SyncState();
CheckIfSavedInstance(savedInstanceState);
_mLeftDrawer.ItemClick += leftDrawer_Clicked;
}
这是我扩展上一个活动的其他活动,我重新检查了.axml,上面的ID是正确的。
public class MessagesActivity : ToolBarActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.MessageSystem);
}
protected override int GetLayoutResource()
{
return Resource.Layout.MessageSystem;
}
}
答案 0 :(得分:0)
将ContentView设置为Activity会使它在该内容XML中查找“工具栏”项,因此始终为null。
删除SetContentView
方法可以解决此问题。