Android 在ArrayList中的按钮上设置OnClickListener(按钮编号未知)

Android 在ArrayList中的按钮上设置OnClickListener(按钮编号未知),android,button,Android,Button,我正在开发一个Web浏览器,并将“选项卡”(按钮s)存储在阵列列表中,以便于使用。如何在每个按钮上设置OnClickListener?按钮必须启动意图。以下是我目前的代码: public class OpenTabsActivity extends AppCompatActivity { private LinearLayout buttons; private int tabno = -1; private Intent in; private Intent settings; p

我正在开发一个Web浏览器,并将“选项卡”(
按钮
s)存储在
阵列列表
中,以便于使用。如何在每个按钮上设置
OnClickListener
?按钮必须启动
意图
。以下是我目前的代码:

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);
         }
     });
 }
// ...
}
public类OpenTabsActivity扩展了appcompativity{
专用线路布局按钮;
private int tabno=-1;
私人意图;
私人意图设置;
私有数组列表;
专用按钮纽塔布;
私有上下文ctx;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u open\u选项卡);
setSupportActionBar((工具栏)findViewById(R.id.Toolbar));
按钮=findViewById(R.id.scroll\u linear);
in=新意图();
设置=新意图();
列表=新的ArrayList();
newTab=findViewById(R.id.newTab);
ctx=这个;
newTab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
按钮n=新按钮(ctx);
列表。添加(n);
tabno+=1;
按钮nB=列表.获取(tabno);
nB.setText(getText(R.string.newtab));
//nB.id=tabno
按钮。添加视图(nB);
}
});
}
// ...
}

您可以定义一个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);
    }
}
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u open\u选项卡);
setSupportActionBar((工具栏)findViewById(R.id.Toolbar));
按钮=findViewById(R.id.scroll\u linear);
in=新意图();
设置=新意图();
列表=新的ArrayList();
newTab=findViewById(R.id.newTab);
ctx=这个;
View.OnClickListener=newview.OnClickListener(){
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例1:
//做点什么
打破
案例2:
//做点什么
打破
违约:
//做点什么
打破
}
}
};
用于(按钮b:列表){
b、 setOnClickListener(listener);
}
}

按钮应该给您返回什么?当它被点击时?编辑(按钮必须开始一个意图)以及意图存储在哪里?我在想(列表中的按钮btn){btn.setOnClickListener(/*…*/)}我的意思是,你将如何区分被点击的按钮,以及你将传递给下一个活动的哪些数据将产生差异
for(Button btn : list){
    btn.setOnClickListener(new View.OnClickListener() { 

@Override
public void onClick(View v) {
    Intent i = new Intent();
} });
}