如何从列表视图中删除选定的项目时,请在Android的删除按钮 [英] How to remove selected items from listview when click remove button in android
问题描述
我显示在列表视图名称,以及复选框,在这里我有按钮,如果单击该按钮,那个时候我需要删除选定的项目,从名单来看,保持项目只有我需要在列表视图中显示,使用下面我$ C $词可以找到什么是我选择的项目,但我不知道如何删除这些,你可以任何一个建议我
MainActivity.class:
公共类MainActivity延伸活动{ 私人的ListView列表视图;
ArrayList的<串GT;项目=新的ArrayList<串GT;();
私人诠释计数;
私人布尔[] thumbnailsselection;
@覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
fillarray();
数= items.size();
thumbnailsselection =新的布尔[计数]
列表视图=(ListView控件)findViewById(R.id.listView1);
listview.setAdapter(新ImageAdapter(MainActivity.this));
}
私人无效fillarray(){
// TODO自动生成方法存根
items.clear();
items.add(Android的阿尔法);
items.add(Android测试版);
items.add(1.5蛋糕(API等级3));
items.add(1.6甜甜圈(API等级4));
items.add(2.0 Eclair的(API级别5));
items.add(2.0.1巧克力慕斯蛋糕(API等级6)); }
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
//充气菜单;如果是present这增加了项目操作栏。
。getMenuInflater()膨胀(R.menu.activity_main,菜单);
返回true;
}
公共类ImageAdapter延伸BaseAdapter {
私人LayoutInflater mInflater;
私人语境mContext;
公共ImageAdapter(上下文的背景下){
mContext =背景;
}
公众诠释的getCount(){
返回计数;
}
公共对象的getItem(INT位置){
返回的位置;
}
众长getItemId(INT位置){
返回的位置;
}
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
ViewHolder持有人;
如果(convertView == NULL){
持有人=新ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(
R.layout.row_photo,NULL);
holder.textview =(TextView中)convertView
.findViewById(R.id.thumbImage);
holder.checkbox =(复选框)convertView
.findViewById(R.id.itemCheckBox);
convertView.setTag(保持器);
}其他{
支架=(ViewHolder)convertView.getTag();
}
holder.checkbox.setId(位置);
holder.textview.setId(位置);
holder.checkbox.setOnClickListener(新OnClickListener(){
公共无效的onClick(视图v){
// TODO自动生成方法存根
复选框CB =(复选框)V;
INT ID = cb.getId();
如果(thumbnailsselection [ID]){
cb.setChecked(假);
thumbnailsselection [ID] = FALSE;
}其他{
cb.setChecked(真);
thumbnailsselection [ID] =真;
}
}
});
holder.textview.setOnClickListener(新OnClickListener(){
公共无效的onClick(视图v){
// TODO自动生成方法存根
INT ID = v.getId();
}
});
holder.textview.setText(items.get(位置));
holder.checkbox.setChecked(thumbnailsselection [位置]);
holder.id =位置;
返回convertView;
} 公共无效为removeItems()
{
notifyDataSetChanged();
}
}
类ViewHolder {
TextView中的TextView;
复选框复选框;
INT ID;
}
公共无效点击(视图v){
如果(v.getId()== R.id.button1){ 布尔noSelect = FALSE; 的for(int i = 0; I< thumbnailsselection.length;我++){
如果(thumbnailsselection [I] ==真){
noSelect =真; items.remove(ⅰ); }
}
thumbnailsselection =新的布尔[items.size()];
adapter.removeItems();
}
}
}
-
记录所有复选框的状态。
- 数据类型的 SparseBooleanArray 好过布尔[] 这里。
- 初始化的 thumbnailsselection 在 ImageAdapter建筑工,然后在checkbox.setOnCheckedChangeListener修改其值(新的 OnCheckedChangeListener (){})。
//初始化
的for(int i = 0; I< ITEMCOUNT;我++)
thumbnailsselection.put(I,FALSE);//修改
holder.checkbox.setOnCheckedChangeListener(新OnCheckedChangeListener(){
@覆盖
公共无效onCheckedChanged(CompoundButton buttonView,布尔器isChecked){
INT位置= buttonView.getId();
thumbnailsselection.put(位置,器isChecked);
}
}); -
删除从后到前项的 一个接一个,因为删除只影响后面的删除了一个项目的索引。
的for(int i = ITEMCOUNT - 1; I> = 0;我 - ){
位置= thumbnailsselection.keyAt(ⅰ);
=器isChecked thumbnailsselection.get(位置,FALSE); 如果(!器isChecked)
继续; 如果(位置< items.size())
items.remove(位置);
} -
显示新的数据。
imageAdapter.notifyDataSetChanged();
am displaying names in list view, with check boxes,here i have button if i click that button that time i need to remove selected items and from list view, remain items only i need to show in list view,using below i code i can find what are the items i selected but i dont know how to remove those, can you any one suggest me
MainActivity.class:
public class MainActivity extends Activity {
private ListView listview;
ArrayList<String> items = new ArrayList<String>();
private int count;
private boolean[] thumbnailsselection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fillarray();
count = items.size();
thumbnailsselection = new boolean[count];
listview = (ListView) findViewById(R.id.listView1);
listview.setAdapter(new ImageAdapter(MainActivity.this));
}
private void fillarray() {
// TODO Auto-generated method stub
items.clear();
items.add("Android alpha");
items.add("Android beta");
items.add("1.5 Cupcake (API level 3)");
items.add("1.6 Donut (API level 4)");
items.add("2.0 Eclair (API level 5)");
items.add("2.0.1 Eclair (API level 6)");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public class ImageAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private Context mContext;
public ImageAdapter(Context context) {
mContext = context;
}
public int getCount() {
return count;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(
R.layout.row_photo, null);
holder.textview = (TextView) convertView
.findViewById(R.id.thumbImage);
holder.checkbox = (CheckBox) convertView
.findViewById(R.id.itemCheckBox);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.checkbox.setId(position);
holder.textview.setId(position);
holder.checkbox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) v;
int id = cb.getId();
if (thumbnailsselection[id]) {
cb.setChecked(false);
thumbnailsselection[id] = false;
} else {
cb.setChecked(true);
thumbnailsselection[id] = true;
}
}
});
holder.textview.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
int id = v.getId();
}
});
holder.textview.setText(items.get(position));
holder.checkbox.setChecked(thumbnailsselection[position]);
holder.id = position;
return convertView;
}
public void removeItems()
{
notifyDataSetChanged();
}
}
class ViewHolder {
TextView textview;
CheckBox checkbox;
int id;
}
public void click(View v) {
if (v.getId() == R.id.button1) {
boolean noSelect = false;
for (int i = 0; i < thumbnailsselection.length; i++) {
if (thumbnailsselection[i] == true) {
noSelect = true;
items.remove(i);
}
}
thumbnailsselection = new boolean[items.size()];
adapter.removeItems();
}
}
}
Record the state of all CheckBox.
- Data type SparseBooleanArray is better than boolean[] here.
- Initialize thumbnailsselection in ImageAdapter constructer, and modify its values in checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {}).
// Initialize
for (int i = 0; i < itemCount; i++) thumbnailsselection.put(i, false);
// Modify
holder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { int position = buttonView.getId(); thumbnailsselection.put(position, isChecked); } });
Remove items from back to front, one by one, because the deletion only affects indices of items behind the removed one.
for (int i = itemCount - 1; i >= 0; i--) { position = thumbnailsselection.keyAt(i); isChecked = thumbnailsselection.get(position, false); if (!isChecked) continue; if (position < items.size()) items.remove(position); }
Show new data.
imageAdapter.notifyDataSetChanged();
这篇关于如何从列表视图中删除选定的项目时,请在Android的删除按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!