Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在没有类强制转换异常的情况下重构findViewById?_Android_Classcastexception_Findviewbyid - Fatal编程技术网

Android 如何在没有类强制转换异常的情况下重构findViewById?

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

通常,当我的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 = (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(例如)不是由这个循环设置的,是吗?您有一个视图数组,但只能通过取消对该数组的引用来获取它们。。。对吧?有时候你不需要投。如果您只执行由视图定义的操作,例如添加一个点击式侦听器,只需将其声明为视图,而不强制转换它。