Работа с кнопками в Android - PullRequest
       0

Работа с кнопками в Android

0 голосов
/ 22 сентября 2011

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

Дело в том, что мое приложение требует 2 или более кнопок, и это часть, в которой я частично застрял.Мой код реализует «SetWordsBtn», показанный ниже (все остальное объявлено),

public void onCreate (Bundle icicle) {

   super.onCreate(icicle);
   setContentView(R.layout.main);

   SetWordsBtn=(Button)findViewById(R.id.SetWordsBtn);

   SetWordsBtn.setOnClickListener(this);

}

, который реализует onClick () следующим образом:

public void onClick (View view) {

  startWords();

}

, но что еслиу меня есть другая кнопка, которая удаляет такие слова, как «DelWordsBtn»?Я думал, что смогу объявить обе кнопки одновременно так:

  SetWordsBtn=(Button)findViewById(R.id.SetWordsBtn);
  DelWordsBtn=(Button)findViewById(R.id.DelWordsBtn);

  SetWordsBtn.setOnClickListener(this);
  DelWordsBtn.setOnClickListener(this);

а как насчет метода onClick ()?Это автоматически применяется к обеим кнопкам, когда я делаю это?

Как я могу объявить отдельный onClick друг от друга, чтобы он одновременно делал разные вещи, когда я нажимал на любой из них?

Я думал, что ответ может быть что-то вроде этого, но я не знаю:

  //Declarations
  SetWordsBtn=(Button)findViewById(R.id.SetWordsBtn);
  DelWordsBtn=(Button)findViewById(R.id.DelWordsBtn);

  SetWordsBtn.setOnClickListener(setWordsView);
  DelWordsBtn.setOnClickListener(delWordsView);

  //onClick Functions

public void onClick (View setWordsView) {

  startWords();

}

public void onClick (View delWordsView) {

  deleteWords();

}

Таким образом, он фактически связывает функцию startWords () с SetWordsBtn и deleteWords() DelWordsBtn ...

Любое четкое объяснение / форма помощи будет принята.Заранее спасибо, ребята.:)

Ответы [ 4 ]

3 голосов
/ 22 сентября 2011

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

View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.SetWordsBtn:
                startWords();
                break;
            case R.id.DelWordsBtn:
                deleteWords();
                break;
        }
    }
};

int[] ids = { R.id.SetWordsBtn, R.id.DelWordsBtn };

for(int i : ids) ((Button)findViewById(i)).setOnClickListener(listener);
1 голос
/ 22 сентября 2011

В качестве альтернативы вы можете установить анонимный внутренний класс (классы), которые прослушивают, вместо того, чтобы сама ваша активность была слушателем, который реализует OnClickListener.Пример из кнопки Android: javadoc:

     button.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
             // Perform action on click
         }
     });

http://developer.android.com/reference/android/widget/Button.html

PS начинайте имена локальных переменных и имена методов с букв нижнего регистра - верхний регистр для имен классов.

0 голосов
/ 26 января 2013

Кнопка перетаскивания на graghiclayout.xml ...> щелкните правой кнопкой мыши по кнопке -> выберите другие свойства ....> выберите унаследованный вид ...> щелкните по щелчку .... назовите его callme .

Это будет показано так:

XML-файл

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="76dp"
    android:layout_y="58dp"
    android:onClick="callme"
    android:text="Button" />

Запустите один раз ваш проект:

Open src ---> активность .java -----> , сделайте кодировку так:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.main);

   but=(Button)findViewById(R.id.button1);
}

public void callme(View v)
{
//Do somthing
}
0 голосов
/ 22 сентября 2011

Где вы предложили:

public void onClick(View setWordsView) {

  startWords();
}

public void onClick(View delWordsView) {

  deleteWords();
}

Если подумать, нет разницы в объявлениях двух методов, и вы получите ошибку сборки (сигнатуры методов одинаковы, даже если параметр метода, Вид, имеет другое имя).

Если я правильно понимаю ваш вопрос, то ответ, данный kcoppock, верен.Вы также можете определить анонимный класс

...