按钮setOnClickListener on for循环

时间:2013-12-09 11:01:10

标签: android buttonclick

我有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]是额外的。我希望我很清楚。

5 个答案:

答案 0 :(得分:3)

试试这个..

您已将titleurl值传递给下一个活动。但是,在for loop结束时,titleurl将仅包含for循环的最后一个值。因此,无论button click title,只有urlsetTag(int key, Object tag)中的最后存储值才会转到下一个活动。

您可以使用url并将title内的buttonfor 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}}

setTag(int key, Object tag);

getTag(int key);

答案 1 :(得分:3)

您可以将titleurl设置为每个按钮的标记

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)

您可以在循环的每次迭代中获取相关的titleurl并将其存储在最终版本中,然后您可以在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); 但是,您必须将此侦听器定义为上面的代码。