我正在尝试的是,用户将按下按钮并创建一个新按钮(按钮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)按钮不在那里。
任何提示?
答案 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,不幸的是他们回来时不会在那里,你必须做以下其中一件事:
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
而使用的额外内存。