setonlongclicklistener для нескольких кнопок одновременно
Я хочу, чтобы кнопка 1,2,3 отвечала на лонгклик, пользователю будет предложено ввести текстовую кнопку. Внутри onCreate я написал:
Button botonEditable;
Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
context = MainActivity.this;
Resources r = getResources();
String pName = getPackageName();
for (int i=1;i<4;i++){
botonEditable = (Button) findViewById(r.getIdentifier("button" + i, "id", pName));
botonEditable.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
final AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setMessage("Nueva Categoria:");
final EditText input = new EditText(context);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton ) {
// Do something with value!
String newCateg = input.getText().toString();
botonEditable.setText(newCateg);
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.show();
return true;
}
});
}
}
Когда это проверено, 3 кнопки реагируют соответственно, чтобы показать предупреждающее сообщение, но когда я ввожу текст и нажимаю ОК, текст изменяется только в button3, независимо от того, какая кнопка была нажата долго:(Что это не так и как исправить это в простой способ?
5 ответов
Я нашел решение, в моем коде я просто заменил строку
public boolean onLongClick(View v) {....
этим
public boolean onLongClick(final View v) {....
плюс ваши предложения:
((Button)v).setText(newCateg.toUpperCase());
Теперь все в порядке. Спасибо вам, ребята, ваша помощь оставила меня в миллиметрах от решения.
:)
Попробуй это
button.setOnLongClickListener(new longClcik());
class longClcik implements OnLongClickListener {
public boolean onLongClick(View v) {
return false;
}
}
Попробуйте это.. Замените следующий код
public void onClick(DialogInterface dialog, int whichButton ) {
// Do something with value!
String newCateg = input.getText().toString();
botonEditable.setText(newCateg);
}
с
public void onClick(DialogInterface dialog, int whichButton ) {
// Do something with value!
String newCateg = input.getText().toString();
((Button)v).setText(newCateg);
}
Вы должны использовать View
перешел к OnLongClickListener
, Это даст вам текущее нажатое представление и обновит его значение, поэтому вместо этого сделайте это
botonEditable.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
final AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setMessage("Nueva Categoria:");
final EditText input = new EditText(context);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton ) {
// Do something with value!
String newCateg = input.getText().toString();
((Button)v).setText(newCateg); //<-- see the botonEditable changed to v
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.show();
return true;
}
});
Я делаю это так:
- Сначала вы должны реализовать в своем классе View.OnLongClickListener
Второй метод переопределения onLongClick
@Override
public boolean onLongClick (View v) {
onCheckboxLongClicked (v);
вернуть истину;
}Создайте метод onCheckBoxLongClicked, который является недействительным. Или вы можете реализовать свой Swith внутри OnLongClick
switch (view.getId ()) {
case R.id.cbDigits:
Toast.makeText (getActivity (), "Message", Toast.LENGTH_SHORT).show ();
перерыв;
,
,
,
}
Извините, но я до сих пор не знаю, как отформатировать код, чтобы получить отступ...