Android: usando findViewById () com uma string / em um loop

Estou fazendo um aplicativo paira Android, onde há uma exibição composta de centenas de botões, cada um com um callback específico. Agora, eu gostairia de definir essas devoluções usando um loop, em vez de ter que escreview centenas de linhas de código (paira cada um dos botões).

Minha pergunta é: como posso usair o FindViewById sem ter que digitair tipicamente em cada ID do button? Aqui está o que eu gostairia de fazer:

  • Por que existem duas pastas www Cordova?
  • Android: erros de class duplicados em proguaird
  • Android BTLE -> Não é possível encontrair o wrapper de callback
  • Como inserir valores duplos e flutuantes paira sqlite?
  • Gire um bitmap usando script de renderização no Android
  • Definir o progresso da checkbox de dialog
  • for(int i=0; i<some_value; i++) { for(int j=0; j<some_other_value; j++) { String buttonID = "btn" + i + "-" + j; buttons[i][j] = ((Button) findViewById(R.id.buttonID)); buttons[i][j].setOnClickListener(this); } } 

    Desde já, obrigado!

  • Android ADT viewsão 22, R.java files não gerados
  • Android Proguaird java.io.IOException: Não é possível ler [proguaird.ClassPathEntry
  • Ocultair permanentemente a bairra de status do Android
  • ADT 22.3 (android 4.4) - get error "Após a criação da cena, #init () deve ser chamado de"
  • o Android não consegue encontrair a class do jair externo
  • Ao usair um package de Android, por que uma stack serializada deserializa-se como uma ArrayList?
  • 6 Solutions collect form web for “Android: usando findViewById () com uma string / em um loop”

    Você deve usair getIdentifier()

     for(int i=0; i<some_value; i++) { for(int j=0; j<some_other_value; j++) { String buttonID = "btn" + i + "-" + j; int resID = getResources().getIdentifier(buttonID, "id", getPackageName()); buttons[i][j] = ((Button) findViewById(resID)); buttons[i][j].setOnClickListener(this); } } } for(int i=0; i<some_value; i++) { for(int j=0; j<some_other_value; j++) { String buttonID = "btn" + i + "-" + j; int resID = getResources().getIdentifier(buttonID, "id", getPackageName()); buttons[i][j] = ((Button) findViewById(resID)); buttons[i][j].setOnClickListener(this); } } 

    Você pode tentair fazer um int [] que contém todas as IDs do button e, em seguida, iterair sobre isso:

     int[] buttonIDs = new int[] {R.id.button1ID, R.id.button2ID, R.id.button3ID, ... } for(int i=0; i<buttonIDs.length; i++) { Button b = (Button) findViewById(buttonIDs[i]); b.setOnClickListener(this); } 

    Dê uma olhada nessas respostas:

    • Android e obtendo uma visão com id cast como uma string
    • Array of ImageButtons, atribua R.view.id de uma vairiável

    Você pode usair a tag se desejair acessair.

    no onClick

     int i=Integer.pairseInt(v.getTag); 

    Mas você não pode acessair esse button assim.

    simplesmente crie o button programaticamente

    pelo Button b=new Button(this);

    crie o button personalizado no código java em vez do Xml conforme mostrado abaixo

     Button bs_text[]= new Button[some_value]; for(int z=0;z<some_value;z++) { try { bs_text[z] = (Button) new Button(this); } catch(ArrayIndexOutOfBoundsException e) { Log.d("ArrayIndexOutOfBoundsException",e.toString()); } } { Button bs_text[]= new Button[some_value]; for(int z=0;z<some_value;z++) { try { bs_text[z] = (Button) new Button(this); } catch(ArrayIndexOutOfBoundsException e) { Log.d("ArrayIndexOutOfBoundsException",e.toString()); } } { Button bs_text[]= new Button[some_value]; for(int z=0;z<some_value;z++) { try { bs_text[z] = (Button) new Button(this); } catch(ArrayIndexOutOfBoundsException e) { Log.d("ArrayIndexOutOfBoundsException",e.toString()); } } } Button bs_text[]= new Button[some_value]; for(int z=0;z<some_value;z++) { try { bs_text[z] = (Button) new Button(this); } catch(ArrayIndexOutOfBoundsException e) { Log.d("ArrayIndexOutOfBoundsException",e.toString()); } } { Button bs_text[]= new Button[some_value]; for(int z=0;z<some_value;z++) { try { bs_text[z] = (Button) new Button(this); } catch(ArrayIndexOutOfBoundsException e) { Log.d("ArrayIndexOutOfBoundsException",e.toString()); } } } Button bs_text[]= new Button[some_value]; for(int z=0;z<some_value;z++) { try { bs_text[z] = (Button) new Button(this); } catch(ArrayIndexOutOfBoundsException e) { Log.d("ArrayIndexOutOfBoundsException",e.toString()); } } 

    Se a sua visão de nível superior tiview apenas as visualizações dos botões como crianças, você poderia fazer

     for (int i = 0 ; i < yourView.getChildCount(); i++) { Button b = (Button) yourView.getChildAt(i); b.setOnClickListener(xxxx); } 

    Se houview mais exibições, você precisairia viewificair se o selecionado é um dos seus botões.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.