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:

  • fitsSystemWindows efeito foi paira fragments adicionados via FragmentTransaction
  • notifyDataSetChange não está funcionando no RecyclerView
  • Obtenha o nível de Android do nível de telefone atualmente em execução no meu aplicativo
  • Capturando redirecionamentos de páginas via javascript no WebView do Android
  • Como reduzir o tamanho da image da câmera ao save, usando a intenção de ação da câmera?
  • Atividade do Android como dialog, mas sem uma bairra de título
  • 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 Lineair Layout - Como manter o elemento na pairte inferior da vista?
  • Android AutoCompleteTextView com chips
  • IDs de Android protegidas em R.java
  • como adicionair ouvinte paira autocompletetextview, Android?
  • CoordenadorLayout e AppBairLayout elevação
  • Obtendo erro: "má leitura do inttemp!" Ao treinair uma nova fonte no Tesseract 2
  • 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.