working studio setonclicklistener not android button onclick onclicklistener buttonclick

not - setonclicklistener android studio



obtener OnClick() de los botones agregados por programaciĆ³n? (4)

Este código se está ejecutando. Espero que te ayude :)

final ArrayList<String> Keys = new ArrayList<String>(); for(int i = 0; i < 10; i ++){ Keys.add("Keys is : " + String.valueOf(i)); } LinearLayout Row = (LinearLayout)findViewById(R.id.KeysList); final Button[] my_button = new Button[Keys.size()]; for (int bt = 0; bt < Keys.size(); bt ++){ final int Index = bt; my_button[Index] = new Button(this); my_button[Index].setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)); my_button[Index].setText(Keys.get(Index)); my_button[Index].setId(Index); my_button[bt].setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (my_button[Index].getId() == ((Button) v).getId()){ Toast.makeText(getBaseContext(), Keys.get(Index), 0).show(); } } }); Row.addView(my_button[Index]); }

ID de ProjectProject: su proyecto

He agregado algunos botones en un diseño:

LinearLayout row = (LinearLayout)findViewById(R.id.KeysList); keys=db.getKeys(console); my_button=new Button[keys.size()]; for (bt=0;bt<keys.size();bt++){ my_button[bt]=new Button(this); my_button[bt].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.FILL_PARENT)); my_button[bt].setText(keys.get(bt)); my_button[bt].setId(bt); row.addView(my_button[bt]); my_button[bt].setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (my_button[bt].getId() == ((Button) v).getId()){ Toast.makeText(getBaseContext(), keys.get(bt), 0).show(); } } }); }


Quiero saber en qué botón se hace clic y cómo obtener el texto del botón presionado.
¡Y creo que el uso de la dosis aquí no parece funcionar!


Otra forma es hacer que su actividad escuche todos los clics de los botones y luego solo filtre los respectivos a la identificación. No deberías obtener el texto del botón y usarlo en absoluto. Deberías usar tu propio tipo de identificador, idealmente la idea debería ser suficiente. O tal vez use setTag como se describe en @qberticus.


Probablemente deberías usar View#setTag para establecer algunos datos arbitrarios que quieras asociar con el Botón. A continuación, solo puede crear una instancia de OnClickListener que luego usa getTag y actúa sobre esos datos de la forma que necesite.


Considera este ejemplo:

public class MainActivity extends Activity implements View.OnClickListener { LinearLayout linearLayout; Button [] button; View.OnClickListener listener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); linearLayout=(LinearLayout)findViewById(R.id.parent_lay); String[] array={"U123","U124","U125"}; int length=array.length; System.out.println("11111111111111111111111111"); button=new Button[length]; for(int i=0;i<length;i++) { button[i]=new Button(getApplicationContext()); button[i].setId(i); button[i].setText("User" + i); button[i].setOnClickListener(this); linearLayout.addView(button[i]); } } @Override public void onClick(View view) { view.getId(); Button button=(Button)findViewById(view.getId()); button.setText("Changed"); } }

Esto funciona bien :)