Android 在 onCreate 之外获取自定义视图
Android get custom view outside onCreate
我是 Android Java 开发的初学者,所以我不确定我是否最好地描述了这个问题。
无论如何:我在 onCreate 函数中创建了一个 Tileview(参见:https://github.com/moagrius/TileView)并将此 Tileview 添加到自定义 relativelayout,如下所示:
TileView tileView = new TileView( this );
...
((RelativeLayout) findViewById(R.id.rootView)).addView(tileView);
这一切都很好。我还有一个抽屉菜单,用于放置位置。这个想法是,在菜单中,您可以单击位置,Tileview 将滑动并缩放到该位置:
tileView.slideToAndCenterWithScale(1000, 1000, (float) 0.4);
这可行,但我只能在我的 onCreate 函数中使用 tileView。我可以制作此视图 public 或以某种方式在该函数之外调用它吗?
我为我的抽屉菜单尝试的是通过以下方式获取视图:
TileView tileView = (TileView) findViewById(R.id.rootView);
这不起作用,因为“意外转换为 TileView,可能是因为它是 RelativeLayout。如何获取在 onCreate 中创建的 TileView?
整个抽屉菜单功能:
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
TileView tileView = (TileView) findViewById(R.id.rootView);
if (id == R.id.nav_entrance) {
tileView.slideToAndCenterWithScale(1000, 1000, (float) 0.4);
} else if (id == R.id.nav_tower) {
tileView.slideToAndCenterWithScale(1500, 1500, (float) 0.4);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
提前致谢!
使 tileView
成为与 class 相同的 field/member 你有你的 onCreate 方法,这里是一个例子。
TileView tileView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
tileView = new TileView( this );
...
((RelativeLayout) findViewById(R.id.rootView)).addView(tileView);
...
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_entrance) {
tileView.slideToAndCenterWithScale(1000, 1000, (float) 0.4);
} else if (id == R.id.nav_tower) {
tileView.slideToAndCenterWithScale(1500, 1500, (float) 0.4);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
我是 Android Java 开发的初学者,所以我不确定我是否最好地描述了这个问题。
无论如何:我在 onCreate 函数中创建了一个 Tileview(参见:https://github.com/moagrius/TileView)并将此 Tileview 添加到自定义 relativelayout,如下所示:
TileView tileView = new TileView( this );
...
((RelativeLayout) findViewById(R.id.rootView)).addView(tileView);
这一切都很好。我还有一个抽屉菜单,用于放置位置。这个想法是,在菜单中,您可以单击位置,Tileview 将滑动并缩放到该位置:
tileView.slideToAndCenterWithScale(1000, 1000, (float) 0.4);
这可行,但我只能在我的 onCreate 函数中使用 tileView。我可以制作此视图 public 或以某种方式在该函数之外调用它吗?
我为我的抽屉菜单尝试的是通过以下方式获取视图:
TileView tileView = (TileView) findViewById(R.id.rootView);
这不起作用,因为“意外转换为 TileView,可能是因为它是 RelativeLayout。如何获取在 onCreate 中创建的 TileView?
整个抽屉菜单功能:
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
TileView tileView = (TileView) findViewById(R.id.rootView);
if (id == R.id.nav_entrance) {
tileView.slideToAndCenterWithScale(1000, 1000, (float) 0.4);
} else if (id == R.id.nav_tower) {
tileView.slideToAndCenterWithScale(1500, 1500, (float) 0.4);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
提前致谢!
使 tileView
成为与 class 相同的 field/member 你有你的 onCreate 方法,这里是一个例子。
TileView tileView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
tileView = new TileView( this );
...
((RelativeLayout) findViewById(R.id.rootView)).addView(tileView);
...
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_entrance) {
tileView.slideToAndCenterWithScale(1000, 1000, (float) 0.4);
} else if (id == R.id.nav_tower) {
tileView.slideToAndCenterWithScale(1500, 1500, (float) 0.4);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}