2016-01-06 63 views
0

我是Android Java開發人員的初學者,所以我不確定我是否最好地描述了這個問題。Android在外部創建自定義視圖onCreate

反正我已經在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); 

這工作,但我只能用我的tileView功能的onCreate裏面。我可以公開這個視圖還是以某種方式將它稱爲此功能?

我已經試過了我的抽屜菜單什麼是得到的觀點:

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; 
    } 

提前感謝!

+1

將tileView對象作爲類obejct,然後可以在整個類中訪問tileView。然後,您可以輕鬆引用onCreate()方法之外的tileView對象。 –

回答

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; 
}