【问题标题】:Android get custom view outside onCreateAndroid在onCreate之外获取自定义视图
【发布时间】:2016-01-06 16:15:31
【问题描述】:

我是 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。我可以将此视图公开或以某种方式在此函数之外调用它吗?

我对抽屉菜单的尝试是通过以下方式获取视图:

TileView tileView = (TileView) findViewById(R.id.rootView);

这不起作用,因为 'Unexpected cast to TileView,可能是因为它是一个相对布局。我应该如何获取在 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 对象作为类对象,然后 tileView 可以在整个类中访问。然后你可以很容易地在 onCreate() 方法之外引用 tileView 对象。

标签: android android-layout layout oncreate


【解决方案1】:

tileView 设为与您的 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-09
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多