Android ловит событие onclick кнопкой, созданной программно - PullRequest
0 голосов
/ 12 сентября 2018

Я создал кнопку программно в макете, но теперь не могу найти способ отловить ваше событие onClick. Код выглядит следующим образом:

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Button;


public class MainActivity extends Activity implements View.OnClickListener {

int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;

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

    LinearLayout linLayout = new LinearLayout(this);

    linLayout.setOrientation(LinearLayout.VERTICAL);

    LinearLayout.LayoutParams linLayoutParam = new 
    LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
    LinearLayout.LayoutParams.MATCH_PARENT);
    setContentView(linLayout, linLayoutParam);


        LinearLayout.LayoutParams lpView = new 
        LinearLayout.LayoutParams(wrapContent, wrapContent);

            Button btn = new Button(this);
            btn.setText("Button");
            linLayout.addView(btn, lpView);

}//fin de onCreate


@Override
public void onClick(View view) {

    switch (view.getId()) {

        case R.id.btn:  //Here the problem begins with error 'btn'

            break;


    }

   }
}

Как мне сделать так, чтобы он распознал символ "btn" объект, который был создан программно?

Спасибо.

Ответы [ 4 ]

0 голосов
/ 14 сентября 2018

С помощью следующего кода я достиг цели, однако мне бы понравилось решение использовать SWITCH CASE для нескольких кнопок, чтобы иметь возможность идентифицировать их по их идентификатору.

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity  {
int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;

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

    LinearLayout linLayout = new LinearLayout(this);

    linLayout.setOrientation(LinearLayout.VERTICAL);

    LinearLayout.LayoutParams linLayoutParam = new 
    LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
    LinearLayout.LayoutParams.MATCH_PARENT);

    setContentView(linLayout, linLayoutParam);


        LinearLayout.LayoutParams lpView = new LinearLayout.LayoutParams(wrapContent, wrapContent);



            Button btn = new Button(this);
            btn.setText("Button");
            linLayout.addView(btn, lpView);


    btn.setOnClickListener(new View.OnClickListener() {
                                         @Override
                                         public void onClick(View v) {
                                            Toast.makeText(getApplicationContext(),"click btn." ,Toast.LENGTH_SHORT).show();
                                         }
                                     }
    );

}//end de onCreate
}
0 голосов
/ 12 сентября 2018

Как @TheWanderer сказал, что вы не указали ID

btn.setId(your_set_id);
btn.setOnClickListener(this);

Затем позже

switch(item.getItemId()) { 

case R.id.your_set_id:
break;

}
0 голосов
/ 12 сентября 2018

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

Button btn = new Button(this);
btn.setText("Button");
btn.setId(4); //give a positive integer

затем получите идентификатор кнопки следующим образом:

int buttonID = btn.getId();

и

@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.buttonID :  
            //do something
            break;
    }
   }
}

Отредактировано:

    Button btn = new Button(this);
    btn.setOnClickListener(this) //add this line.
    btn.setText("Button");
    btn.setId(4); //give a positive integer
    linLayout.addView(btn, lpView);
0 голосов
/ 12 сентября 2018

Не могу поверить, что не могу найти вопрос, который уже был написан по этому поводу ...

Если вы прочитаете документы , Google скажет вам, что делать прямо вверхняя часть страницы: button.setOnClickListener().В вашем случае:

Button btn = new Button(this);
btn.setOnClickListener(this);
...