动态填充按钮值android

时间:2013-04-27 05:35:11

标签: android button dynamic findviewbyid

我见过很多例子,其中一个使用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()函数中。即。

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 个答案:

答案 0 :(得分: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); 

你应该为diffrerent 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;
    }
}

以这种方式发布你的观点。

答案 1 :(得分:1)

 int[] id={R.id.button1,R.id.button2};
 Button b=(Button)findViewById(id[i]);

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这对我来说没什么意义。如果你真正想要的是这个:

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

您需要做的就是使用onClick(View view)

OnClickListener方法设置价值
public void onClick(View view) {
    btnOpenPopup = (Button)view;
}