Android 如何在没有类强制转换异常的情况下重构findViewById?
通常,当我的android应用程序中有许多元素时,onCreate看起来如下所示:Android 如何在没有类强制转换异常的情况下重构findViewById?,android,classcastexception,findviewbyid,Android,Classcastexception,Findviewbyid,通常,当我的android应用程序中有许多元素时,onCreate看起来如下所示: onCreate(){ ImageButton b1 = (ImageButton)findViewById(R.id.b1) ; ImageButton b2 = (ImageButton)findViewById(R.id.b2) ; ImageVuew v3 = (ImageButton)findViewById(R.id.v3) ; ViewSwitcher v4 = (Vi
onCreate(){
ImageButton b1 = (ImageButton)findViewById(R.id.b1) ;
ImageButton b2 = (ImageButton)findViewById(R.id.b2) ;
ImageVuew v3 = (ImageButton)findViewById(R.id.v3) ;
ViewSwitcher v4 = (ViewSwitcher)findViewbyId(R.id.v4) ;
TextView v5 = (TextView)findViewById(R.id.v5) ;
//and so on
}
View[]clickableViews = {forkImageView, patronImageView,cabelImageView1,cabelImageView2, bulb_switcher,doublePlugImageView,kettleBaseImageView,kettleSwitcher} ;
int []image_views_ids = {R.id.forkImage, R.id.patronImage, R.id.bulb_switcher, R.id.cabel1, R.id.cabel2, R.id.longcabel, R.id.kettle_base, R.id.kettleSwitcher};
for( int i = 0 ; i < clickableViews.length;i++){
clickableViews[i] = findViewById(image_views_ids[i]);
}
Android需要对应用程序中的每一个文本、图像、按钮等进行此类转换。但是文本、图像、按钮、切换器都是视图类的子类强>
我尝试将所有视图添加到一个视图数组中,并循环如下:
onCreate(){
ImageButton b1 = (ImageButton)findViewById(R.id.b1) ;
ImageButton b2 = (ImageButton)findViewById(R.id.b2) ;
ImageVuew v3 = (ImageButton)findViewById(R.id.v3) ;
ViewSwitcher v4 = (ViewSwitcher)findViewbyId(R.id.v4) ;
TextView v5 = (TextView)findViewById(R.id.v5) ;
//and so on
}
View[]clickableViews = {forkImageView, patronImageView,cabelImageView1,cabelImageView2, bulb_switcher,doublePlugImageView,kettleBaseImageView,kettleSwitcher} ;
int []image_views_ids = {R.id.forkImage, R.id.patronImage, R.id.bulb_switcher, R.id.cabel1, R.id.cabel2, R.id.longcabel, R.id.kettle_base, R.id.kettleSwitcher};
for( int i = 0 ; i < clickableViews.length;i++){
clickableViews[i] = findViewById(image_views_ids[i]);
}
View[]ClickableView={forkImageView、CustomerImageView、CabelImageView 1、CabelImageView 2、灯泡切换器、双插拔图像视图、KettleBaseMageView、kettleSwitcher};
int[]image_view_id={R.id.forkImage,R.id.patronImage,R.id.bull_switcher,R.id.cabel1,R.id.cabel2,R.id.longcabel,R.id.cattle_base,R.id.cattleswitcher};
对于(int i=0;i
它可能引发类强制转换异常
有没有一种方法仍然可以以智能的方式完成呢?您也应该加入View类 您的代码如下所示:
View[]clickableViews = {forkImageView, patronImageView,cabelImageView1,cabelImageView2, bulb_switcher,doublePlugImageView,kettleBaseImageView,kettleSwitcher} ;
int []image_views_ids = {R.id.forkImage, R.id.patronImage, R.id.bulb_switcher, R.id.cabel1, R.id.cabel2, R.id.longcabel, R.id.kettle_base, R.id.kettleSwitcher};
for( int i = 0 ; i < clickableViews.length;i++){
clickableViews[i] =(View)findViewById(image_views_ids[i]);
}
View[]ClickableView={forkImageView、CustomerImageView、CabelImageView 1、CabelImageView 2、灯泡切换器、双插拔图像视图、KettleBaseMageView、kettleSwitcher};
int[]image_view_id={R.id.forkImage,R.id.patronImage,R.id.bull_switcher,R.id.cabel1,R.id.cabel2,R.id.longcabel,R.id.cattle_base,R.id.cattleswitcher};
对于(int i=0;i
试试这个,我想这就是你要找的。它将使您的代码更干净:)
该网站的示例如下:
class ExampleActivity extends Activity {
@InjectView(R.id.title) TextView title;
@InjectView(R.id.subtitle) TextView subtitle;
@InjectView(R.id.footer) TextView footer;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.inject(this);
// TODO Use "injected" views...
}
}
但是forkImageView(例如)不是由这个循环设置的,是吗?您有一个视图数组,但只能通过取消对该数组的引用来获取它们。。。对吧?有时候你不需要投。如果您只执行由视图定义的操作,例如添加一个点击式侦听器,只需将其声明为视图,而不强制转换它。