这个开关出了什么问题?

时间:2013-06-28 11:49:01

标签: java android

我有一个功能:

public void vfShareQuote (String textToShare){
    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, textToShare);
    sendIntent.setType("text/plain");
    startActivity(sendIntent);
}

还有很多以编程方式创建的按钮,其中有两个:

Button agafon_1 = new Button(this);agafon_1.setText(R.string.agafon_1);llPreViewList.addView(agafon_1, lParams);
Button agafon_2 = new Button(this);agafon_2.setText(R.string.agafon_2);llPreViewList.addView(agafon_2, lParams);

这是OnClickListener:

OnClickListener oclShareQuote = new OnClickListener() {
    @Override
    public void onClick(View v) {
//Set the text based on the selected button and send it to function vfShareQuote
    switch (v.getId()) {
    case R.string.agafon_1:
        vfShareQuote(getResources().getText(R.string.name_agafon)+":\n"+getResources().getText(R.string.agafon_1));
        break;
    case R.string.agafon_2:
        vfShareQuote(getResources().getText(R.string.name_agafon)+":\n"+getResources().getText(R.string.agafon_2));
        break;
    }
    }
};

当然:

agafon_1.setOnClickListener(oclShareQuote);
agafon_2.setOnClickListener(oclShareQuote);

但是当你按下按钮时 - 没有任何反应。为什么?或者是以编程方式创建按钮? 怎么办? 由谷歌翻译。

3 个答案:

答案 0 :(得分:4)

因为R.string.agafon_1R.string.agafon_2不是ID。它们只是字符串资源的id。将id设置为按钮并改为使用它们。使用像

agafon_1.setId(id1);
agafon_2.setId(id2);

其中id1和id2是两个int。并使用它们

OnClickListener oclShareQuote = new OnClickListener() {
    @Override
    public void onClick(View v) {
//Set the text based on the selected button and send it to function vfShareQuote
    switch (v.getId()) {
    case id1:
        vfShareQuote(getResources().getText(R.string.name_agafon)+":\n"+getResources().getText(R.string.agafon_1));
        break;
    case id2:
        vfShareQuote(getResources().getText(R.string.name_agafon)+":\n"+getResources().getText(R.string.agafon_2));
        break;
    }
    }
};

答案 1 :(得分:0)

问题出在交换机块中..您没有为按钮设置Id并且您正在尝试访问它们onClick ..

agafon_1.setId(1);
agafon_2.setId(2);

然后在开关块中使用这些id

OnClickListener oclShareQuote = new OnClickListener() {
    @Override
    public void onClick(View v) {
//Set the text based on the selected button and send it to function vfShareQuote
    switch (v.getId()) {
    case 1://agafon_1 is clicked
        vfShareQuote(getResources().getText(R.string.name_agafon)+":\n"+getResources().getText(R.string.agafon_1));
        break;
    case 2://agafon_2 is clicked
        vfShareQuote(getResources().getText(R.string.name_agafon)+":\n"+getResources().getText(R.string.agafon_2));
        break;
    }
    }
};

答案 2 :(得分:0)

以编程方式创建按钮时,您应该以这种方式为每个按钮提供一个id:

agafon_1.setId("btn id");

并且还有一个问题,对于一些android sdks交换机案例不再工作, 你必须使用if语句。