如何编辑/删除以编程方式创建的其他方法中的对象

时间:2014-12-12 15:33:41

标签: java android

我有一个方法可以垂直创建布局,每个布局都有3个按钮,水平对齐onClick,一次创建一个,每次点击最多5个布局。如何使用创建的按钮删除这些布局。

 public void addTroop(Editable name){

    LinearLayout mainPage = (LinearLayout) findViewById(R.id.manageTroopsMain);

    if (count <= 5)
    {
    //CREATE NEW LINEAR LAYOUT
    LinearLayout addTroopLayout = new LinearLayout(this);   

    //CREATE LAYOUT PARAMS FOR LAYOUT
    LinearLayout.LayoutParams newLayout = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    newLayout.bottomMargin = 10;

    //STYLE NEW LINEAR LAYOUT
    addTroopLayout.setTag("addTroopLayout" + count);
    addTroopLayout.setLayoutParams(newLayout);
    addTroopLayout.setOrientation(LinearLayout.HORIZONTAL);     

    //CREATE NEW BUTTONS
    Button newTroop = new Button(this);
    Button remove = new Button(this);
    Button change = new Button(this);

    //CREATE LAYOUT PARAMS FOR BUTTONS
    LinearLayout.LayoutParams newTroopParam = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 20f);
    LinearLayout.LayoutParams rmvBtnParam = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, .5f);
    LinearLayout.LayoutParams chngNameParam = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, .5f);


    //STYLE NEW BUTTONS
    newTroop.setText(name);
    newTroop.setGravity(Gravity.LEFT|Gravity.CENTER_VERTICAL);
    newTroop.setLayoutParams(newTroopParam);
    remove.setTag("rmvBtn" + count);
    remove.setText("-");
    remove.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
    remove.setLayoutParams(rmvBtnParam);
    change.setText("...");
    change.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
    change.setLayoutParams(chngNameParam);

    //ADD VIEWS TO NEW LAYOUT
    addTroopLayout.addView(newTroop);
    addTroopLayout.addView(remove);
    addTroopLayout.addView(change);

    //ADD NEW LAYOUT TO mainPage LAYOUT
    mainPage.addView(addTroopLayout);

    //Increment Counter
    count++;
    }
}

每次创建布局时,都会使用以下内容进行设置,以便每个布局都命名为addTroopLayout1,addTroopLayout2等。

addTroopLayout.setTag("addTroopLayout" + count);

我使用删除按钮

做了同样的事情
remove.setTag("rmvBtn" + count);

那么现在如何访问/编辑/删除这些?我可以做点什么吗

    Button rmvBtn1 = (Button) findViewByTag(R.id.rmvBtn1);

    rmvBtn1.setOnClickListener(new view.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //REMOVE CREATED LAYOUT
            //DECREMENT ALL LAYOUT TAGS BY 1 IF NOT LAST LAYOUT
            //DECREMENT count VAR BY ONE
            //ERASE ALL VARIABLES ASSOCIATED WITH THIS VIEW
        }
    });

这段代码显然给了我错误,我确信这很简单。感谢。

//////////////////// EDIT /////////////////////

很抱歉,如果我想清楚我想要什么。所以我使用从使用onClick的方法调用的if语句创建/设置了一个按钮:

Button newTroop = new Button(this);
remove.setTag("rmvBtn" + count);

计数从1开始,并在按下按钮时递增。现在我想找到该按钮的ViewByTag,用它来代替:输入代码

Button rmvBtn1 = (Button) findViewByTag(rmvBtn1);

rmvBtn1.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//REMOVE CREATED LAYOUT
//DECREMENT ALL LAYOUT TAGS BY 1 IF NOT LAST LAYOUT
//DECREMENT count VAR BY ONE
//ERASE ALL VARIABLES ASSOCIATED WITH THIS VIEW
}
});

具体如何使用我的if语句创建的按钮?我还需要通过

来定义它吗?
Button rmvBtn1 = (Button) findViewByTag(rmvBtn1);

还是我应该采取另一种方式吗?

1 个答案:

答案 0 :(得分:1)

在删除按钮中保持视图,并保持视图的父视图的标记

addTroopLayout.setTag(mainPage);
remove.setTag(addTroopLayout);

然后像这样使用它

rmvBtn1.setOnClickListener(new view.OnClickListener() {

        @Override
        public void onClick(View v) {
            View willRemove = (View)v.getTag();
            LinearLayout mainPage = (LinearLayout)willRemove.getTag();
            mainPage.removeView(willRemove);
        }
    });