Android 在ArrayList中的按钮上设置OnClickListener(按钮编号未知)
我正在开发一个Web浏览器,并将“选项卡”(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
按钮
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();
} });
}