0

我见过很多例子,其中一个使用 if 条件或 case 语句以编程方式更改元素的条件...... yadda yadda。我需要根据用户单击的内容更改按钮的值。以下是我目前拥有的代码。

 Button btnOpenPopup = (Button)findViewById(R.id.polarity);
        btnOpenPopup = (Button) findViewById(R.id.color); 
final Button finalBtnOpenPopup = btnOpenPopup;         

btnOpenPopup.setOnClickListener(new Button.OnClickListener(){CONTINUES TO OTHER FUNCTIONS }

我基本上需要知道按下了什么按钮。然后将其动态填充到 findViewById() 函数中。IE

btnOpenPopup = (Button) findViewById(R.id.DYNAMTICVALUEOFBUTTONUSERHASPRESSED);

这样,当它到达代码的最后一个 Button 部分时,它将具有用户单击的值。如果我只想在不同的配置中拥有一个按钮或一页一英里深的代码(不理想),那么代码就可以工作。

到目前为止,我看到的所有示例都是在用户单击按钮之后(这是我想要的),但是它们像上面的代码所示静态地命名按钮名称,但非常静态。

希望一切都说得通。

更新:

我想我可能混淆了情况。下面是剩下的代码。希望这将提供上下文。btnOpenPopup 需要保持与在调用中使用的相同,以执行新窗口实际弹出的命令。希望这将为我想要实现的目标提供更多背景信息。

 final Button finalBtnOpenPopup = btnOpenPopup;
        btnOpenPopup.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View arg0) {LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
                View popupView = layoutInflater.inflate(R.layout.meditationpopup, null);

                //set the title of the popup
                TextView titletext = (TextView) popupView.findViewById(R.id.chakratitle);
                titletext.setText(activityName);

                if (activityName.equals("Root"))
                {
                    switch (arg0.getId())
                    {
                        case R.id.color:
                            //Rename the string so to get the value from the string xml
                            String stringName = activityName.toLowerCase().replaceAll(" ","")+"color";
                            TextView desctext = (TextView) popupView.findViewById(R.id.popupDesc);
                            desctext.setText(getString(getStringResource(getApplicationContext(),stringName)));
                        break;
                        case R.id.polarity:
                            //Rename the string so to get the value from the string xml
                            String polarityString = activityName.toLowerCase().replaceAll(" ","")+"polarity";
                            TextView polarityDesc = (TextView) popupView.findViewById(R.id.popupDesc);
                            //polarityDesc.setText(activityName);
                            polarityDesc.setText(getString(getStringResource(getApplicationContext(),polarityString)));
                        break;
                    }
                }
4

4 回答 4

1
 int[] id={R.id.button1,R.id.button2};
 Button b=(Button)findViewById(id[i]);
于 2013-04-27T09:03:43.353 回答
1

我认为

Button btnOpenPopup = (Button)findViewById(R.id.polarity);
       btnOpenPopup = (Button) findViewById(R.id.color); 

应该

 Button btnOpenPopupFirst = (Button)findViewById(R.id.polarity);
 Button btnOpenPopupSecond = (Button) findViewById(R.id.color); 

你应该为不同的 findviewbyid 声明不同的按钮

在我的日食中它也不接受

btnOpenPopup.setOnClickListener(new Button.OnClickListener()

相反,它适用于

btnOpenPopup.setOnClickListener(new View.OnClickListener() {}

并且您需要更清楚地了解您想要执行的操作

新的想法,尝试这样做:

 btnOpenPopupFirst.setOnClickListener(this);
 btnOpenPopupSecond.setOnClickListener(this);

然后选项将出现在上述两个代码行中

The method setOnClickListener(View.OnClickListener) in the type View is not applicable for the arguments (MainActivity)

选择这个

let MainActivity implement OnClickListener  

那么这个选项就会出现

The type MainActivity must implement the inherited abstract method View.OnClickListener.onClick(View)

选择

add unimplemented method

现在

@Override
public void onClick(View v)

将被创建

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.polarity:
        Toast.makeText(getApplicationContext(), "btnOpenPopupFirst(polarity) is pressed", Toast.LENGTH_SHORT).show();
//other code to be performed regarding this button
        break;
    case R.id.color:
        Toast.makeText(getApplicationContext(), "btnOpenPopupSecond(color) is pressed", Toast.LENGTH_SHORT).show();
//other code to be performed regarding this button
    default:
        break;
    }
}

并在以这种方式实施后发表您的观点。

于 2013-04-27T06:15:36.763 回答
0

Button.OnClickListener 中的 onClick 方法有一个 View 参数...您可以在该视图上调用 getId() 以获取被单击的按钮的 id。

于 2013-04-27T05:47:36.813 回答
0

这对我来说没有太大意义。如果你真正想要的是这样的:

btnOpenPopup = (Button) findViewById(R.id.DYNAMTICVALUEOFBUTTONUSERHASPRESSED);

您需要做的就是在您的onClick(View view)方法中设置您的价值OnClickListener

public void onClick(View view) {
    btnOpenPopup = (Button)view;
}
于 2013-04-27T06:14:04.603 回答