当您在应用中按下按钮时,如何删除某些元素,例如微调框和复选框?
谢谢!
编辑:
在我的情况下,当您单击该按钮时,我有一个“重复”按钮,出现一个复选框,您可以根据需要添加任意数量。所以我不确定要删除它们,因为对于这些重复的复选框,我没有设置的变量名要删除..以下是创建新复选框的代码。注意: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;
}
}
}
答案 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;
}
}
}