在android中按下按钮时如何删除某些元素

时间:2018-08-08 02:24:00

标签: android button checkbox spinner

当您在应用中按下按钮时,如何删除某些元素,例如微调框和复选框?

谢谢!

编辑:

在我的情况下,当您单击该按钮时,我有一个“重复”按钮,出现一个复选框,您可以根据需要添加任意数量。所以我不确定要删除它们,因为对于这些重复的复选框,我没有设置的变量名要删除..以下是创建新复选框的代码。注意:buttontest是应该删除其他项目的按钮。我以粗体突出显示了我认为是问题所在的代码。

  public class create extends AppCompatActivity {


    private LinearLayout mLinearLayout;

    private ArrayList<SearchableSpinner> mSpinners;
    //TODO add the below list of buttons and checkboxes
    private List<AppCompatButton> mButtons = new ArrayList<>();
    private List<CheckBox> mCheckboxes = new ArrayList<>();
    Button buttontest;





    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);




        mSpinners = new ArrayList<>();

        mLinearLayout = findViewById(R.id.my_linearLayout);

        //mLinearLayout.addView(makeSpinner());    // First spinner



        FloatingActionButton floatingActionButton =
                (FloatingActionButton) findViewById(R.id.fab);

        floatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getBaseContext(), "Item added!" , Toast.LENGTH_SHORT ).show();

                // Handle the click.
                Spinner spinner = makeSpinner();
                mLinearLayout.addView(spinner); //Add another spinner


                LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)spinner.getLayoutParams();
                layoutParams.setMargins( 5,  70,  10,  0);

                Resources resources = getResources();
                DisplayMetrics metrics = resources.getDisplayMetrics();

                layoutParams.height = (int) (80 * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT)); //80
                layoutParams.width = (int) (240 * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT)); //240
                spinner.setLayoutParams(layoutParams);


                //Add a new button
                AppCompatButton newButton = makeButton();
                mLinearLayout.addView(newButton);      // Add another button
                //TODO add button to the list
                mButtons.add(newButton);


                //Add a new checkbox
                CheckBox newCheckbox = makeCheckbox();
                mLinearLayout.addView(newCheckbox);

                //TODO add checkbox to your list
                mCheckboxes.add(newCheckbox);
            }
        });

    }


//DUPLICATING ITEMS WHEN + IS PRESSED

    private CheckBox makeCheckbox() {
        //Create new Checkbox
        CheckBox checkbox = new CheckBox(this);

        // Setup layout
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        checkbox.setLayoutParams(layoutParams);
        return checkbox;
    }


    private AppCompatButton makeButton() { //creates new buttons i need
        //Create new Button
        AppCompatButton button = new AppCompatButton(this);
        // code for deleting the buttons i need //
        buttontest = (Button)findViewById(R.id.buttontest);
        buttontest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {



                Toast.makeText(getBaseContext(), "Item removed." , Toast.LENGTH_SHORT ).show();

                //makeCheckbox().setVisibility(View.GONE);
                //buttontest.setVisibility(View.GONE);
                //TODO when you want to make one of them gone do the following
                //Last button disappears
                if(mButtons.size() > 0) {
                    mButtons.get(mButtons.size()-1).setVisibility(View.GONE);
                    //mButtons.remove(mButtons.size()-1);
                }

                //Last checkbox disappears
                if(mCheckboxes.size() > 0) {
                    mCheckboxes.get(mCheckboxes.size()-1).setVisibility(View.GONE);
                  //  mCheckboxes.remove(mCheckboxes.size()-1);
                }


                //Last checkbox disappears
                if(mSpinners.size() > 0) {
                    mSpinners.get(mSpinners.size()-1).setVisibility(View.GONE);
                   // mSpinners.remove(mSpinners.size()-1);
                }

                //Please note that the number within get() is the index of the buttons or
                //checkboxes you added so there could
                //be any number of items depends on how many you added

            }
        });



        // Setup layout
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        button.setBackgroundColor(Color.parseColor("#ffffff"));


        return button;
    }

    private Spinner makeSpinner() {
        //opens csv
        InputStream inputStream = getResources().openRawResource(R.raw.shopitems);
        CSVFile csvFile = new CSVFile(inputStream);
        List<String> itemList = csvFile.read();

        //Create new spinner
       // SearchableSpinner spinner = (SearchableSpinner) new Spinner(this, Spinner.MODE_DROPDOWN);
        SearchableSpinner spinner = new SearchableSpinner(this);


        // Setup layout
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        spinner.setLayoutParams(layoutParams);
        MyListAdapter adapter = new MyListAdapter(this, R.layout.listrow, R.id.txtid, itemList);


        spinner.setAdapter(adapter);



        //Add it to your list of spinners so you can retrieve their data when you click the getSpinner button
        mSpinners.add(spinner);
        return spinner;
    }



    //csv file code
    private class CSVFile {
        InputStream inputStream;

        public CSVFile(InputStream inputStream) {
            this.inputStream = inputStream;
        }

        public List<String> read() {

            List<String> resultList = new ArrayList<String>();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            try {
                String line;
                while ((line = reader.readLine()) != null) {
                    String[] row = line.split(",");
                    resultList.add(row[1]);
                }
            } catch (IOException e) {
                Log.e("Main", e.getMessage());
            } finally {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    Log.e("Main", e.getMessage());
                }
            }
            return resultList;
        }
    }
}

3 个答案:

答案 0 :(得分:0)

您不仅可以在Android中删除UI元素,还可以将微调框和复选框的可见性设置为GONE。这样会完全从屏幕上删除实体,但会将其保留在内存中以备将来使用。

spinner.setVisibility(View.GONE);
checkbox.setVisibility(View.GONE);

答案 1 :(得分:0)

根据您的要求,您应该通过代码控制视图的可见性

CheckBox chekbox = (Checkbox)findViewByID(R.id.your_view_id);

然后单击按钮,您可以通过此操作删除视图

chekbox.setVisibility(View.GONE);

如果设置View.GONE,则视图消失,并且视图后面确实包含任何空间。 如果设置了View.INVISIBLE,则视图消失了,但是视图后面有空格。

答案 2 :(得分:0)

更新:下面的答案说明: OP通过以下方式(复选框示例)添加了复选框,按钮和微调框的添加实例:

private CheckBox makeCheckbox() {
    //Create new Checkbox
    CheckBox checkbox = new CheckBox(this);
    // Setup layout
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    checkbox.setLayoutParams(layoutParams);
    return checkbox;
}

在创建了这些视图的实例之后,将它们保存在List<>中以进行跟踪:

private List<CheckBox> mCheckboxes = new ArrayList<>();

    //Add a new checkbox
    CheckBox newCheckbox = makeCheckbox();

   //TODO add checkbox to your list
   mCheckboxes.add(newCheckbox);

最后,新视图被添加到根ViewGroup中,在我们的例子中是LinearLayout:

private LinearLayout mLinearLayout;

    mLinearLayout = findViewById(R.id.my_linearLayout);
    mLinearLayout.addView(newCheckbox);

在使任何元素消失并删除其实例时,我通过保留的List<>访问它们的实例:

mCheckboxes.get(mCheckboxes.size()-1).setVisibility(View.GONE);
mCheckboxes.remove(mCheckboxes.size()-1);

这就是我应该做的:您应该像创建微调器一样创建按钮列表和复选框列表,在其中可以获取创建的按钮和复选框的实例:

private LinearLayout mLinearLayout;

private ArrayList<Spinner> mSpinners;
//TODO add the below list of buttons and checkboxes
private List<AppCompatButton> mButtons = new ArrayList<>();
private List<CheckBox> mCheckboxes = new ArrayList<>();
Button buttontest;





@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_create);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);




    mSpinners = new ArrayList<>();

    mLinearLayout = findViewById(R.id.my_linearLayout);

    //mLinearLayout.addView(makeSpinner());    // First spinner



    FloatingActionButton floatingActionButton =
            (FloatingActionButton) findViewById(R.id.fab);

    floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Handle the click.
            Spinner spinner = makeSpinner();
            mLinearLayout.addView(spinner); //Add another spinner


            LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)spinner.getLayoutParams();
            layoutParams.setMargins( 5,  70,  10,  0);
            layoutParams.height = 80;//pixels
            layoutParams.width = 240;//pixels
            spinner.setLayoutParams(layoutParams);


            //Add a new button
            AppCompatButton newButton = makeButton();
            mLinearLayout.addView(newButton);      // Add another button
            //TODO add button to the list
            mButtons.add(newButton);


            //Add a new checkbox
            CheckBox newCheckbox = makeCheckbox();
            mLinearLayout.addView(newCheckbox);

            //TODO add checkbox to your list
            mCheckboxes.add(newCheckbox);
        }
    });

    //TODO when you want to make one of them gone do the following
    //Last button disappears
    If(mButtons.size() > 0) { 
        mButtons.get(mButtons.size()-1).setVisibility(View.GONE);
    }

    //Last checkbox disappears
    If(mCheckboxes.size() > 0) {
       mCheckboxes.get(mCheckboxes.size() - 1).setVisibility(View.GONE);
    }
    //Please note that the number within get() is the index of the buttons or 
   //checkboxes you added so there could 
   //be any number of items depends on how many you added

}


//DUPLICATING ITEMS WHEN + IS PRESSED

private CheckBox makeCheckbox() {
    //Create new Checkbox
    CheckBox checkbox = new CheckBox(this);

    // Setup layout
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    checkbox.setLayoutParams(layoutParams);
    return checkbox;
}


**private AppCompatButton makeButton() { //creates new buttons i need
    //Create new Button
    AppCompatButton button = new AppCompatButton(this);
    // code for deleting the buttons i need //
    buttontest = (Button)findViewById(R.id.buttontest);
    buttontest.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            buttontest.setVisibility(View.GONE);
            makeCheckbox().setVisibility(View.GONE);
        }
    });** 






    // Setup layout
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    button.setBackgroundColor(Color.parseColor("#ffffff"));


    return button;
}

private Spinner makeSpinner() {
    //opens csv
    InputStream inputStream = getResources().openRawResource(R.raw.shopitems);
    CSVFile csvFile = new CSVFile(inputStream);
    List<String> itemList = csvFile.read();

    //Create new spinner
    Spinner spinner = new Spinner(this, Spinner.MODE_DROPDOWN);

    // Setup layout
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    spinner.setLayoutParams(layoutParams);
    MyListAdapter adapter = new MyListAdapter(this, R.layout.listrow, R.id.txtid, itemList);


    spinner.setAdapter(adapter);

    //Add it to your list of spinners so you can retrieve their data when you click the getSpinner button
    mSpinners.add(spinner);
    return spinner;
}



//csv file code
private class CSVFile {
    InputStream inputStream;

    public CSVFile(InputStream inputStream) {
        this.inputStream = inputStream;
    }

    public List<String> read() {

        List<String> resultList = new ArrayList<String>();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        try {
            String line;
            while ((line = reader.readLine()) != null) {
                String[] row = line.split(",");
                resultList.add(row[1]);
            }
        } catch (IOException e) {
            Log.e("Main", e.getMessage());
        } finally {
            try {
                inputStream.close();
            } catch (IOException e) {
                Log.e("Main", e.getMessage());
            }
        }
        return resultList;
    }
}
}

新编辑:

public class create extends AppCompatActivity {


    private LinearLayout mLinearLayout;

    private ArrayList<Spinner> mSpinners;
    //TODO add the below list of buttons and checkboxes
    private List<AppCompatButton> mButtons = new ArrayList<>();
    private List<CheckBox> mCheckboxes = new ArrayList<>();
    Button buttontest;





    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);




        mSpinners = new ArrayList<>();

        mLinearLayout = findViewById(R.id.my_linearLayout);

        //mLinearLayout.addView(makeSpinner());    // First spinner



        FloatingActionButton floatingActionButton =
                (FloatingActionButton) findViewById(R.id.fab);

        floatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Handle the click.
                Spinner spinner = makeSpinner();
                mLinearLayout.addView(spinner); //Add another spinner


                LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)spinner.getLayoutParams();
                layoutParams.setMargins( 5,  70,  10,  0);
                layoutParams.height = 80;//pixels
                layoutParams.width = 240;//pixels
                spinner.setLayoutParams(layoutParams);


                //Add a new button
                AppCompatButton newButton = makeButton();
                mLinearLayout.addView(newButton);      // Add another button
                //TODO add button to the list
                mButtons.add(newButton);


                //Add a new checkbox
                CheckBox newCheckbox = makeCheckbox();
                mLinearLayout.addView(newCheckbox);

                //TODO add checkbox to your list
                mCheckboxes.add(newCheckbox);
            }
        });

    }


//DUPLICATING ITEMS WHEN + IS PRESSED

    private CheckBox makeCheckbox() {
        //Create new Checkbox
        CheckBox checkbox = new CheckBox(this);

        // Setup layout
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        checkbox.setLayoutParams(layoutParams);
        return checkbox;
    }


    private AppCompatButton makeButton() { //creates new buttons i need
        //Create new Button
        AppCompatButton button = new AppCompatButton(this);
        // code for deleting the buttons i need //
        buttontest = (Button)findViewById(R.id.buttontest);
        buttontest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //makeCheckbox().setVisibility(View.GONE);
                //buttontest.setVisibility(View.GONE);
                //TODO when you want to make one of them gone do the following
                //Last button disappears
                if(mButtons.size() > 0) {
                    mButtons.get(mButtons.size()-1).setVisibility(View.GONE);
mButtons.remove(mButtons.size()-1);
               }

               //Last checkbox disappears
              if(mCheckboxes.size() > 0) {
                   mCheckboxes.get(mCheckboxes.size()-1).setVisibility(View.GONE);
mCheckboxes.remove(mCheckboxes.size()-1);
                }
        //Please note that the number within get() is the index of the buttons or
        //checkboxes you added so there could
        //be any number of items depends on how many you added

            }
        });






        // Setup layout
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        button.setBackgroundColor(Color.parseColor("#ffffff"));


        return button;
    }

    private Spinner makeSpinner() {
        //opens csv
        InputStream inputStream = getResources().openRawResource(R.raw.shopitems);
        CSVFile csvFile = new CSVFile(inputStream);
        List<String> itemList = csvFile.read();

        //Create new spinner
        Spinner spinner = new Spinner(this, Spinner.MODE_DROPDOWN);

        // Setup layout
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        spinner.setLayoutParams(layoutParams);
        MyListAdapter adapter = new MyListAdapter(this, R.layout.listrow, R.id.txtid, itemList);


        spinner.setAdapter(adapter);

        //Add it to your list of spinners so you can retrieve their data when you click the getSpinner button
        mSpinners.add(spinner);
        return spinner;
    }



    //csv file code
    private class CSVFile {
        InputStream inputStream;

        public CSVFile(InputStream inputStream) {
            this.inputStream = inputStream;
        }

        public List<String> read() {

            List<String> resultList = new ArrayList<String>();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            try {
                String line;
                while ((line = reader.readLine()) != null) {
                    String[] row = line.split(",");
                    resultList.add(row[1]);
                }
            } catch (IOException e) {
                Log.e("Main", e.getMessage());
            } finally {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    Log.e("Main", e.getMessage());
                }
            }
            return resultList;
        }
    }
}