Android 使用复选框和按钮的自定义listview实现。安卓

Android 使用复选框和按钮的自定义listview实现。安卓,android,listview,button,checkbox,Android,Listview,Button,Checkbox,我已经实现了一个自定义适配器类来控制我的listview。我针对listview中的每一行实现了一个按钮、一个文本框和一个复选框。我有几个按钮不是listview的一部分。它们位于列表视图下方。现在,当我选中任意数量的复选框并按下不属于listview的按钮时,我希望能够删除复选框(如果有)。换句话说,我希望b能够通过单击不属于listview的按钮来删除选中的项 这是我的主要课程 public class ASvideofiles extends Activity implements OnC

我已经实现了一个自定义适配器类来控制我的listview。我针对listview中的每一行实现了一个按钮、一个文本框和一个复选框。我有几个按钮不是listview的一部分。它们位于列表视图下方。现在,当我选中任意数量的复选框并按下不属于listview的按钮时,我希望能够删除复选框(如果有)。换句话说,我希望b能够通过单击不属于listview的按钮来删除选中的项

这是我的主要课程

public class ASvideofiles extends Activity implements OnClickListener {

int count = 0;
private String[] vidNames;
private String[] vidPaths;
private ListView myList;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.asvideofiles);

    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(this);
    Button b2 = (Button) findViewById(R.id.button2);
    b2.setOnClickListener(this);

    File f = new File(Environment.getExternalStorageDirectory(), 
            "ABC/XYZ/");
    File[] files  = f.listFiles();
    vidNames = new String[files.length];
    vidPaths = new String[files.length];

    if(files != null) {
        for(int i=0; i < files.length; i++) {
            vidNames[i] = files[i].getName();
            vidPaths[i] = files[i].getPath();
            count ++;
        }
    }

    ArrayList<String> list = new ArrayList<String>();

    for (int i = 0; i < files.length; i++) {
        list.add(vidNames[i]);
    }

    myList = (ListView)findViewById(R.id.listView1);
    myList.setAdapter(new AScustomadapter(ASvideofiles.this, list));
}

@Override
public void onClick(View v) {
    if(v.getId() == R.id.button1) {


    } else if(v.getId() == R.id.button2) {


    }

}
 }
公共类ASvideofiles扩展活动实现OnClickListener{
整数计数=0;
私有字符串[]名称;
私有字符串[]路径;
私有列表视图myList;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.asvideofiles);
按钮b1=(按钮)findViewById(R.id.button1);
b1.setOnClickListener(本);
按钮b2=(按钮)findViewById(R.id.button2);
b2.setOnClickListener(本);
文件f=新文件(Environment.getExternalStorageDirectory(),
“ABC/XYZ/”;
File[]files=f.listFiles();
vidNames=新字符串[files.length];
vidPaths=新字符串[files.length];
如果(文件!=null){
对于(int i=0;i
这是我的适配器类

     public class AScustomadapter extends BaseAdapter {

private ArrayList<String> mListItems;
private LayoutInflater mLayoutInflater;
int i = 0;
private ArrayList<Integer> checkedIndices = new ArrayList<Integer>();

public AScustomadapter(Context context, ArrayList<String> arrayList) {
    mListItems = arrayList;
    //get the layout inflater
    mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return mListItems.size();
}

@Override
public Object getItem(int i) {
    return null;
}

@Override
public long getItemId(int i) {
    return 0;
}

public int getTotalCheckedCount() {
    return checkedIndices.size();
}

@Override
public View getView(final int position, View view, ViewGroup viewGroup) {
    ViewHolder holder;

    if (view == null) {
        holder = new ViewHolder();

        view = mLayoutInflater.inflate(R.layout.list_item, null);
        holder.itemName = (TextView) view.findViewById(R.id.list_item_text_view);
        holder.cb1 = (CheckBox) view.findViewById(R.id.checkBox1);

        view.setTag(holder);
    } else {
        holder = (ViewHolder)view.getTag();
    }

    final String stringItem = mListItems.get(position);

    if (stringItem != null) {
        if (holder.itemName != null) {
            holder.itemName.setText(stringItem);
        }
    }

    holder.cb1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if (isChecked) {
                if(checkedIndices.contains(position)){

                }else {
                    checkedIndices.add(position);
                }

            }else {
                checkedIndices.remove((Integer)position);
            }
        }
    });

    if(checkedIndices.contains((Integer)position)) {
        holder.cb1.setChecked(true);
    } else {
        holder.cb1.setChecked(false);
    }

    //this method must return the view corresponding to the data at the specified position.
    return view;
}

private static class ViewHolder {

    protected TextView itemName;
    protected CheckBox cb1;

}
  }
公共类AScustomadapter扩展了BaseAdapter{
私人阵列列表;
私人停车场平面布置;
int i=0;
private ArrayList checkedIndices=新ArrayList();
公共AScustomadapter(上下文上下文,ArrayList ArrayList){
mListItems=阵列列表;
//找到布局充气机
mLayoutInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
}
@凌驾
public int getCount(){
返回mListItems.size();
}
@凌驾
公共对象getItem(int i){
返回null;
}
@凌驾
公共长getItemId(int i){
返回0;
}
public int getTotalCheckedCount(){
返回checkedDices.size();
}
@凌驾
公共视图getView(最终整数位置、视图视图、视图组视图组){
视窗座;
如果(视图==null){
holder=新的ViewHolder();
视图=MLAyoutFlater.充气(R.layout.list\u项,空);
holder.itemName=(TextView)view.findViewById(R.id.list\u item\u text\u view);
holder.cb1=(复选框)view.findViewById(R.id.checkBox1);
视图.设置标签(支架);
}否则{
holder=(ViewHolder)view.getTag();
}
最终字符串stringItem=mListItems.get(位置);
如果(stringItem!=null){
if(holder.itemName!=null){
holder.itemName.setText(stringItem);
}
}
setOnCheckedChangeListener(新的OnCheckedChangeListener()){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(已检查){
如果(选中的骰子包含(位置)){
}否则{
选中骰子。添加(位置);
}
}否则{
checkedDices.remove((整数)位置);
}
}
});
if(checkedDices.contains((整数)位置)){
holder.cb1.setChecked(真);
}否则{
holder.cb1.setChecked(假);
}
//此方法必须返回与指定位置的数据对应的视图。
返回视图;
}
私有静态类视图持有者{
受保护的TextView项目名称;
受保护复选框cb1;
}
}

这些行基本上都填充了视频,所以总而言之,我希望能够删除选中复选框并按下删除按钮的选定视频。需要帮助。提前感谢。

维护一个布尔数组,该数组跟踪选中复选框行的位置

然后在按钮onClickListener中,从ArrayList中删除这些项,并将更新后的ArrayList传递给适配器


最后调用notifyDataSetChanged()

这里,我为您提供了一个解决方案。我已经在主活动中添加了适配器类。基本上我已经创建了两个字符串类型的数组列表。选中复选框时,相应的文本视图值存储在列表CHECKEDLIST中。在另一个列表所有值中,存储所有值

单击按钮时,我匹配两个列表,如果出现匹配,则从ALLVALUES中删除该值,并调用
notifydatasetchanged

package com.example.test;

import java.io.File;
import java.util.ArrayList;


import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class MainActivity extends Activity implements OnClickListener {
    private ArrayList<String> checkedIndices = new ArrayList<String>();
    ArrayList<String> list = new ArrayList<String>();
    AScustomadapter adapter;
int count = 0;
private String[] vidNames = {"a","b","c","d","e","f","g","h","i"};
private ListView myList;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(this);



    for (int i = 0; i < vidNames.length; i++) {
        list.add(vidNames[i]);
    }

    myList = (ListView)findViewById(R.id.list);
    adapter = new AScustomadapter(getApplicationContext(), list);
    myList.setAdapter(adapter);
}

@Override
public void onClick(View v) {
    if(v.getId() == R.id.button1) {


        for (int i = 0; i < checkedIndices.size(); i++) {
            for(int j = 0; j <list.size();j++){
            if(list.get(j).contains(checkedIndices.get(i))){
                list.remove(j);
            }
            }
        }
        adapter.notifyDataSetChanged();



    } 

}

public class AScustomadapter extends BaseAdapter {

private ArrayList<String> mListItems;
private LayoutInflater mLayoutInflater;
int i = 0;

public AScustomadapter(Context context, ArrayList<String> arrayList) {
    mListItems = arrayList;
    //get the layout inflater
    mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return mListItems.size();
}

@Override
public Object getItem(int i) {
    return list.get(i);
}

@Override
public long getItemId(int i) {
    return 0;
}

public int getTotalCheckedCount() {
    return checkedIndices.size();
}

@Override
public View getView(final int position, View view, ViewGroup viewGroup) {
    ViewHolder holder;

    if (view == null) {
        holder = new ViewHolder();

        view = mLayoutInflater.inflate(R.layout.list_item, null);
        holder.itemName = (TextView) view.findViewById(R.id.list_item_text_view);
        holder.cb1 = (CheckBox) view.findViewById(R.id.checkBox1);

        view.setTag(holder);
    } else {
        holder = (ViewHolder)view.getTag();
    }

    final String stringItem = mListItems.get(position);

    if (stringItem != null) {
        if (holder.itemName != null) {
            holder.itemName.setText(stringItem);
        }
    }

    holder.cb1.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
                //is chkIos checked?
        if (((CheckBox) v).isChecked()) {
            if(!checkedIndices.contains(getItem(index).toString()))
                checkedIndices.add(getItem(index).toString());          }
        else {
            checkedIndices.remove(getItem(index).toString());

        }
          //case 2

      }
    });

    if(checkedIndices.contains((Integer)position)) {
        holder.cb1.setChecked(true);
    } else {
        holder.cb1.setChecked(false);
    }

    //this method must return the view corresponding to the data at the specified position.
    return view;
}

private class ViewHolder {

    protected TextView itemName;
    protected CheckBox cb1;

}
  }


 }
package com.example.test;
导入java.io.File;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.content.Context;
导入android.os.Bundle;
导入android.os.Environment;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.view.view.OnClickListener;
导入android.widget.BaseAdapter;
导入android.widget.Button;
导入android.widget.CheckBox;
导入android.widget.CompoundButton;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.CompoundButton.OnCheckedChangeListener;
公共类MainActivity扩展活动实现OnClickListener{
private ArrayList checkedIndices=新ArrayList();
ArrayList=新建ArrayList();
自定义适配器;
整数计数=0;
私有字符串[]vidNames={“a”、“b”、“c”、“d”、“e”、“f”、“g”