我有10个按钮,我想为所有按钮设置OnClickListener。此外,点击任何按钮应用程序将进行另一项活动。我只在活动类上发布按钮的定义。我的代码;
Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
Button button3 = (Button) findViewById(R.id.button3);
Button button4 = (Button) findViewById(R.id.button4);
Button button5 = (Button) findViewById(R.id.button5);
Button button6 = (Button) findViewById(R.id.button6);
Button button7 = (Button) findViewById(R.id.button7);
Button button8 = (Button) findViewById(R.id.button8);
Button button9 = (Button) findViewById(R.id.button9);
Button button10 = (Button) findViewById(R.id.button10);
Button buttons[] = {button1, button2, button3, button4, button5, button6, button7, button8, button9, button10};
final String urlOfButtons[] = {"","","","","","","","","","",""};
final String titles[] = {"","","","","","","","","","",""};
JsonNode itemNode = jsonNode.path("Docs");
for(int i=0 ; i<itemNode.size() ; i++){
titles[i] = itemNode.get(i).path("Text").asText();
title = titles[i];
buttons[i].setText(title);
urlOfButtons[i] = itemNode.get(i).path("Link").asText();
url = urlOfButtons[i];
buttons[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(HouseDetail.this, HouseDetailPdf.class);
intent.putExtra("title", title);
intent.putExtra("url", url);
startActivity(intent);
}
});
}
这通常只取得title和url的最后一个值。字符串url,title在类的顶部定义。我点击相同值的每个按钮都会转到其他活动。我想要10个不同的值来添加额外的值。所以我想添加而不是标题和网址;标题[i]和url [i]是额外的。我希望我很清楚。
答案 0 :(得分:3)
试试这个..
您已将title
和url
值传递给下一个活动。但是,在for loop
结束时,title
和url
将仅包含for循环的最后一个值。因此,无论button click
title
,只有url
和setTag(int key, Object tag)
中的最后存储值才会转到下一个活动。
您可以使用url
并将title
内的button
和for loop
值设置为button
内的标签,您可以在里面检索它们getTag(int key)
点击使用JsonNode itemNode = jsonNode.path("Docs");
for(int i=0 ; i<itemNode.size() ; i++){
titles[i] = itemNode.get(i).path("Text").asText();
title = titles[i];
buttons[i].setText(title);
urlOfButtons[i] = itemNode.get(i).path("Link").asText();
url = urlOfButtons[i];
buttons[i].setTag(1,title);
buttons[i].setTag(2,url);
buttons[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(HouseDetail.this, HouseDetailPdf.class);
intent.putExtra("title", v.getTag(1));
intent.putExtra("url", v.getTag(2));
startActivity(intent);
}
});
}
方法..
{{1}}
答案 1 :(得分:3)
您可以将title
和url
设置为每个按钮的标记
buttons[i].setTag(1, title);
buttons[i].setTag(2, url);
并恢复onClick
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(HouseDetail.this, HouseDetailPdf.class);
intent.putExtra("title", v.getTag(1));
intent.putExtra("url", v.getTag(2));
startActivity(intent);
}
或者您可以执行以下操作。将index
存储为标记,以便在点击index
时获得button
。
buttons[i].setTag(i);
获取存储为index
的{{1}}。
tag
答案 2 :(得分:0)
您可以在循环的每次迭代中获取相关的title
和url
并将其存储在最终版本中,然后您可以在onClickListener
中使用它们。
for(int i=0 ; i<itemNode.size() ; i++){
final String title = itemNode.get(i).path("Text").asText();
final String url = itemNode.get(i).path("Link").asText();
buttons[i].setOnClickListener(/* same as you had before */);
}
(警告:未经测试的代码)。
显然,如果您在其他地方使用titles和urls数组,那么您也应该在那里分配值。
答案 3 :(得分:0)
你的课应该像这样实现onclickListener:
public class HomeScreen extends Activity implements OnClickListener
初始化按钮:
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(this);
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(this);
Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(this);
Button button4 = (Button) findViewById(R.id.button4);
butto4.setOnClickListener(this);
处理所有按钮的点击项目:
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
Intent intent = new Intent(HouseDetail.this, HouseDetailPdf.class);
intent.putExtra("title", title);
intent.putExtra("url", url);
startActivity(intent);
break;
case R.id.button2:
Intent intent = new Intent(HouseDetail.this, HouseDetailPdf.class);
intent.putExtra("title", title);
intent.putExtra("url", url);
startActivity(intent);
break;
case R.id.button3:
Intent intent = new Intent(HouseDetail.this, HouseDetailPdf.class);
intent.putExtra("title", title);
intent.putExtra("url", url);
startActivity(intent);
break;
case R.id.button4:
Intent intent = new Intent(HouseDetail.this, HouseDetailPdf.class);
intent.putExtra("title", title);
intent.putExtra("url", url);
startActivity(intent);
break;
}
答案 4 :(得分:0)
制作它的好方法是避免这种循环。只需在xml文件中定义url和标题。
你可以把它放在你的按钮定义中:
android:tag="title|url"
然后,在onClickListener中你应该放:
@Override
public void onClick(View v) {
if(v.getTag() != null){
String[] details = v.getTag().split("|");
Intent intent = new Intent(HouseDetail.this, HouseDetailPdf.class);
intent.putExtra("title", details[0]);
intent.putExtra("url", details[1]);
startActivity(intent);
}
}
});
然后,循环可以用于setOnClickButtonListener(listener); 但是,您必须将此侦听器定义为上面的代码。