Установить OnClickListener для кнопок в ArrayList (номер кнопки неизвестен) - PullRequest
0 голосов
/ 16 мая 2018

Я занимаюсь разработкой веб-браузера и храню «вкладки» (Button s) в ArrayList для удобства использования.Как мне установить OnClickListener на каждую кнопку?Кнопки должны начинать Intent.Вот мой код:

public class OpenTabsActivity extends AppCompatActivity { 
 private LinearLayout buttons;
 private int tabno = -1;
 private Intent in;
 private Intent settings;
 private ArrayList<Button> list;
 private Button newTab;
 private Context ctx;

 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_open_tabs);
     setSupportActionBar((Toolbar)findViewById(R.id.toolbar));
     buttons = findViewById(R.id.scroll_linear);
     in = new Intent();
     settings = new Intent();
     list = new ArrayList<Button>();
     newTab = findViewById(R.id.newtab);
     ctx = this;

     newTab.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             Button n = new Button(ctx);
             list.add(n);
             tabno += 1;
             Button nB = list.get(tabno);
             nB.setText(getText(R.string.newtab));
             // nB.id = tabno
             buttons.addView(nB);
         }
     });
 }
// ...
}

Ответы [ 2 ]

0 голосов
/ 16 мая 2018
for(Button btn : list){
    btn.setOnClickListener(new View.OnClickListener() { 

@Override
public void onClick(View v) {
    Intent i = new Intent();
} });
}
0 голосов
/ 16 мая 2018

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

Затем, как это предлагается в комментариях, вы должны установить его для for, например так:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_open_tabs);
    setSupportActionBar((Toolbar)findViewById(R.id.toolbar));
    buttons = findViewById(R.id.scroll_linear);
    in = new Intent();
    settings = new Intent();
    list = new ArrayList<Button>();
    newTab = findViewById(R.id.newtab);
    ctx = this;

     View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            switch (v.getId()) {
                case 1:
                    // do something
                    break;

                case 2:
                    // do something
                    break;

                default:
                    // do something
                    break;
            }
        }
    };

    for (Button b : list) {
        b.setOnClickListener(listener);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...