如何动态创建多个按钮并分别处理每个按钮

时间:2015-02-09 13:18:53

标签: android android-button

我正在尝试的是,用户将按下按钮并创建一个新按钮(按钮1),并且从该按钮1开始他们将进行不同的活动,您可以创建多个。并在该活动结束后,返回启动此按钮的活动。到目前为止,我已通过此代码设法做到了这一点:

    new_question = (Button)findViewById(R.id.new_question);
    new_question.setOnClickListener(onClick());

private OnClickListener onClick() {
    return new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            mLayout.addView(createNewTextView());

            Button.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                Intent myIntent = new Intent(getBaseContext(), Question.class);
                startActivity(myIntent);
                return;

                }

            });

        }
    };
}

 TextView createNewTextView() {
    final RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    Button = new Button(this);
    lparams.addRule(RelativeLayout.ABOVE, R.id.linearLayout2);
    Button.setLayoutParams(lparams);
    Button.setText("New Question");     
    return Button;
}

我的第一个问题是,我不知道如何以不同的方式处理每个按钮,因为我只创建一个。同时我不想在xml文件中预先创建它们,它们必须通过java类进行编程。

第二,创建每个按钮后能够看到它们。因为在创建按钮后我将进行下一个活动然后返回(不是使用后退按钮,而是使用Intent)按钮不在那里。

任何提示?

2 个答案:

答案 0 :(得分:0)

只需给每个按钮一个tag,然后将它们全部分配到同一个onClickListener,测试这个Button标签,然后根据它做出正确的动作:

mButton.setTag(i);
i++;
mButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    int but_id = Integer.parseInt(v.getTag().toString().trim());
                    if(but_id == 1){
                        // Do Something   
                    }else if(but_id == 2){
                        // Do Another Something   
                    }
                }

            });

<强>更新

标签就像你给视图的标签,以便将来引用它,所以,当给Buttons一个不同的标签时,你就像给它们一个ID,看here进一步的信息。

关于Buttons,不幸的是他们回来时不会在那里,你必须做以下其中一件事:

  1. 重新创建它们。
  2. 在从活动中移动时将其与意图一起传递,并在再次访问活动时再次将它们传递给活动意图,然后使用传递的数据重新创建它们。
  3. 只需将它们定义为static变量,然后在返回时,将它们重新添加到活动布局中的相应父级。

答案 1 :(得分:0)

首先,您可以添加:

// This maps the tag of your button to an Intent to launch a new Activity
private final Map<String,Intent> map = new HashMap<String,Intent>();
// A global listener for your buttons
private final View.OnClickListener listener = new View.OnClickListener(){
    @Override
    public void onClick(View v){
        String tag = (String) v.getTag();
        Intent i = map.get(tag);
        try{
            startActivity(i);
        }catch(ActivityNotFoundException e){
            // Log your exception
        }
    }
};  

然后,这个:

// This is the method where you create a new button
void createNewButton(String tag,Intent i){
    Button button = new Button(this);
    // blah blah for adding it programatically to the layout
    button.setTag(tag);
    // add the intent for starting the Activity associated 
    // with this Button to the Map
    map.put(tag,intent);
    // add the listener
    button.setOnClickListener(listener);
}  

我添加了足够的评论以使代码不言自明。

如果您可以使用Long标记,那么您可以使用SparseArray并节省一些因HashMap而使用的额外内存。