如何使用 onClick 按钮从 ListView 中删除所有内容?
How to remove everything from ListView using a button onClick?
如何使用 onClick 按钮从 ListView 中删除所有内容?当我尝试“fullCourseList.clear();”时,我无法再添加任何课程,只有在再次访问页面后才会刷新页面
import static com.example.diplom.MainActivity.fullCourseList;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.example.diplom.model.Course;
import com.example.diplom.model.Order;
import java.util.ArrayList;
import java.util.List;
public class OrderPage extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_page);
ListView orders_list = findViewById(R.id.orders_list);
List<String> coursesTitle = new ArrayList<>();
for (Course c : MainActivity.fullCourseList) {
if(Order.items_id.contains(c.getId()))
coursesTitle.add(c.getTitle());
}
orders_list.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, coursesTitle));
}
public void openMain(View view){
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
public void onClick(View v) {
//fullCourseList.clear();
}
}
清除 ArrayList 后,您必须通知适配器数据源已更改。
public class OrderPage extends AppCompatActivity {
private ListView orders_list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_page);
orders_list = findViewById(R.id.orders_list);
List<String> coursesTitle = new ArrayList<>();
for (Course c : MainActivity.fullCourseList) {
if(Order.items_id.contains(c.getId()))
coursesTitle.add(c.getTitle());
}
orders_list.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, coursesTitle));
}
public void openMain(View view){
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
public void onClick(View v) {
fullCourseList.clear();
orders_list.getAdapter().notifyDataSetChanged();
}
}
您应该保存适配器,以便可以在其上调用 clear()
。以这种方式清除列表也会自动通知适配器进行更新。由于您将数据复制到新列表 (coursesTitle
),因此清除原始列表不会立即生效。
例如:
public class OrderPage extends AppCompatActivity {
private ListView orders_list;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_page);
orders_list = findViewById(R.id.orders_list);
List<String> coursesTitle = new ArrayList<>();
for (Course c : MainActivity.fullCourseList) {
if(Order.items_id.contains(c.getId()))
coursesTitle.add(c.getTitle());
}
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, coursesTitle)
orders_list.setAdapter(adapter);
}
public void onClick(View v) {
adapter.clear();
}
}
编辑
如果您也想要从主列表中清除当前显示的课程项目,您也需要添加这样的代码。如果这不是您想要的,您需要在关于所需行为的问题中更加清楚。
public void onClick(View v) {
// clear what is currently shown in the list
adapter.clear();
// Clear the currently displayed entries out of the master list.
// You may also be able to use "removeIf" if you have a new
// enough java/api version
Iterator<Course> itr = MainActivity.fullCourseList.iterator();
while (itr.hasNext()) {
Course c = itr.next();
if(Order.items_id.contains(c.getId())) {
itr.remove();
}
}
// And if you want to ENTIRELY clear the master list, you
// could just do this instead
// MainActivity.fullCourseList.clear()
}
一切都比我想象的要容易,我把自己弄糊涂了自己的 class 名字。非常感谢大家的帮助!
这有效:
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;;
import android.widget.ListView;
import com.example.diplom.model.Course;
import com.example.diplom.model.Order;
import java.util.ArrayList;
import java.util.List;
public class OrderPage extends AppCompatActivity {
private ListView orders_list;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_page);
orders_list = findViewById(R.id.orders_list);
List<String> coursesTitle = new ArrayList<>();
for (Course c : MainActivity.fullCourseList) {
if(Order.items_id.contains(c.getId()))
coursesTitle.add(c.getTitle());
}
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, coursesTitle);
orders_list.setAdapter(adapter);
}
public void onClick(View v) {
adapter.clear();
Order.items_id.clear();
}
public void openMain(View view){
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
}
如何使用 onClick 按钮从 ListView 中删除所有内容?当我尝试“fullCourseList.clear();”时,我无法再添加任何课程,只有在再次访问页面后才会刷新页面
import static com.example.diplom.MainActivity.fullCourseList;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.example.diplom.model.Course;
import com.example.diplom.model.Order;
import java.util.ArrayList;
import java.util.List;
public class OrderPage extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_page);
ListView orders_list = findViewById(R.id.orders_list);
List<String> coursesTitle = new ArrayList<>();
for (Course c : MainActivity.fullCourseList) {
if(Order.items_id.contains(c.getId()))
coursesTitle.add(c.getTitle());
}
orders_list.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, coursesTitle));
}
public void openMain(View view){
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
public void onClick(View v) {
//fullCourseList.clear();
}
}
清除 ArrayList 后,您必须通知适配器数据源已更改。
public class OrderPage extends AppCompatActivity {
private ListView orders_list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_page);
orders_list = findViewById(R.id.orders_list);
List<String> coursesTitle = new ArrayList<>();
for (Course c : MainActivity.fullCourseList) {
if(Order.items_id.contains(c.getId()))
coursesTitle.add(c.getTitle());
}
orders_list.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, coursesTitle));
}
public void openMain(View view){
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
public void onClick(View v) {
fullCourseList.clear();
orders_list.getAdapter().notifyDataSetChanged();
}
}
您应该保存适配器,以便可以在其上调用 clear()
。以这种方式清除列表也会自动通知适配器进行更新。由于您将数据复制到新列表 (coursesTitle
),因此清除原始列表不会立即生效。
例如:
public class OrderPage extends AppCompatActivity {
private ListView orders_list;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_page);
orders_list = findViewById(R.id.orders_list);
List<String> coursesTitle = new ArrayList<>();
for (Course c : MainActivity.fullCourseList) {
if(Order.items_id.contains(c.getId()))
coursesTitle.add(c.getTitle());
}
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, coursesTitle)
orders_list.setAdapter(adapter);
}
public void onClick(View v) {
adapter.clear();
}
}
编辑
如果您也想要从主列表中清除当前显示的课程项目,您也需要添加这样的代码。如果这不是您想要的,您需要在关于所需行为的问题中更加清楚。
public void onClick(View v) {
// clear what is currently shown in the list
adapter.clear();
// Clear the currently displayed entries out of the master list.
// You may also be able to use "removeIf" if you have a new
// enough java/api version
Iterator<Course> itr = MainActivity.fullCourseList.iterator();
while (itr.hasNext()) {
Course c = itr.next();
if(Order.items_id.contains(c.getId())) {
itr.remove();
}
}
// And if you want to ENTIRELY clear the master list, you
// could just do this instead
// MainActivity.fullCourseList.clear()
}
一切都比我想象的要容易,我把自己弄糊涂了自己的 class 名字。非常感谢大家的帮助! 这有效:
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;;
import android.widget.ListView;
import com.example.diplom.model.Course;
import com.example.diplom.model.Order;
import java.util.ArrayList;
import java.util.List;
public class OrderPage extends AppCompatActivity {
private ListView orders_list;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order_page);
orders_list = findViewById(R.id.orders_list);
List<String> coursesTitle = new ArrayList<>();
for (Course c : MainActivity.fullCourseList) {
if(Order.items_id.contains(c.getId()))
coursesTitle.add(c.getTitle());
}
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, coursesTitle);
orders_list.setAdapter(adapter);
}
public void onClick(View v) {
adapter.clear();
Order.items_id.clear();
}
public void openMain(View view){
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
}
}