2015-01-15 3 views
0

У меня есть одно действие с 10 кнопками и передача информации о кнопке, нажатой на следующую операцию.Как отправить кнопку нажатой на другую? Эффективно?

View.OnLongClickListener olongBtn = new View.OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 

      if (v == btn1) { 
       Intent intent = new Intent(MainActivity.this, AddContact.class); 
       intent.putExtra("slot", "slot1"); 
       startActivity(intent); 
      } else if (v == btn2) { 
       Intent intent = new Intent(MainActivity.this, AddContact.class); 
       intent.putExtra("slot", "slot2"); 
       startActivity(intent); 
      } else if (v == btn3) { 
       Intent intent = new Intent(MainActivity.this, AddContact.class); 
       intent.putExtra("slot", "slot3"); 
       startActivity(intent); 
      } 
      return false; 
     } 
    }; 

    btn1.setOnLongClickListener(olongBtn); 
    btn2.setOnLongClickListener(olongBtn); 
    btn3.setOnLongClickListener(olongBtn); 

} 

Я хочу, чтобы изменить его, как этого

String slot = toString(v); 
Intent intent = new Intent(MainActivity.this, AddContact.class); 
intent.putExtra("slot", slot); 
startActivity(intent); 

Но когда я это делаю, я получаю в следующей деятельности что-то вроде этого:

android.widget.Button{6548fcd}VFED..CL...P....17.0-147.130 #7f08004f app:id/btnPayman} 

Но я имя ожидания в .

+0

Пожалуйста, используйте Идентификатор вместо имени! – Jayant

+0

Создайте свой собственный объект кнопки, отформатируйте его содержимое как иную информацию о текущей кнопке. Делает его реалистичным, затем помещает его в дополнительный пакет =) –

+0

Привет, я вижу, вы довольно новичок в SO. Если вы чувствуете, что ответ решил проблему, отметьте ее как «принятую», нажав зеленую галочку. Это поможет вам получить более эффективный ответ на сложные вопросы. – pozuelog

ответ

1

Чтобы получить имя щелкнули использование кнопки ((Button)v).getText() метода вместо v.toString() которые возвращают строковое представление вызывающего объекта:

String slot = (Button)v).getText().toString(); 
Intent intent = new Intent(MainActivity.this, AddContact.class); 
intent.putExtra("slot", slot); 
startActivity(intent); 
+0

этот код ничего не возвращает :( – berliozz

+0

@berliozz: hhh !!! вы имеете в виду 'String slot = (Button) v) .getText(). ToString(); нажата строка, не возвращающая текст из Button. –

+0

Да, когда я пытаюсь установить текст в текстовом поле с помощью слота, это поле останется пустым. – berliozz

1

Вы можете просто отправить идентификатор кнопки.

View.OnLongClickListener olongBtn = new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
      Intent intent = new Intent(MainActivity.this, AddContact.class); 
      intent.putExtra("slot", v.getId()); 
      startActivity(intent); 
     return false; 
    } 
}; 

На следующей деятельности, вы можете использовать переключатель для того, чтобы знать, что кнопка была нажата:

int buttonId = getIntent().getIntExtra("slot", 0); 
    switch() { 
     case R.id.firstbutton: 
      //Do what you want 
      break; 
     case R.id.secondbutton: 
      //Do What you whant 
    } 

Отправка INT лучше, чем отправка строки, потому что вы можете использовать переключатель на приемнике активность, которая быстрее, чем анидифицировано, если/else

----------------------- EDIT ------------- ---------

Пока вы используете тег include, чтобы составить свой la yout, вы должны установить другой идентификатор для каждой кнопки (в то же время вы устанавливаете текст кнопки). Вы также можете использовать Integer как тег для каждой кнопки и отправить этот тег для следующего действия (вместо id).

оглядеться просмотреть теги здесь: View setTag() method

+0

Пожалуйста, объясните, если я использую идентификатор, который останется неизменным в будущем? После того, как я снова запустил приложение? – berliozz

+0

Да, вы можете использовать ID без проблем. Этот идентификатор устанавливается в файл макета и автоматически сопоставляется с классом R. Просто не забудьте использовать ссылки на «R class» (R.id.xxxx). – pozuelog

+0

У меня проблема с решением. Я gat каждый раз аналогичный ID. Я думаю, что результат использования включает структуру в XML, когда я создаю пользовательский блок с кнопкой и текстовым просмотром и вставляю его в основное действие. – berliozz

0

Если вы хотите отправить имя кнопки, попробуйте следующее:

String slot = ((Button) v).getText().toString(); 
Intent intent = new Intent(MainActivity.this, AddContact.class); 
intent.putExtra("slot", slot); 
startActivity(intent); 
0

Благодаря pozuelog пользователя для решения. Я использую отдельные XML-файлы для макета и прикрепляю его к include_ main.

В результате этого метода getId для меня не работает.

решение установлено Тег для моих кнопок.

btn1.setTag(1); 
    btn2.setTag(2); 
    btn3.setTag(3); 

    View.OnLongClickListener olongBtn = new View.OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 

       Intent intent = new Intent(MainActivity.this, AddContact.class); 
       intent.putExtra("slot", String.valueOf(v.getTag())); 
       startActivity(intent); 

      return false; 
     } 
    }; 

    btn1.setOnLongClickListener(olongBtn); 
    btn2.setOnLongClickListener(olongBtn); 
    btn3.setOnLongClickListener(olongBtn); 

Я думаю, что решение может быть оптимизировать, но я googlecoder и оставить его как есть на это время.

Смежные вопросы