从使用BaseAdapter构建的ListView中删除一些值

时间:2017-01-06 17:29:12

标签: android listview baseadapter

我正在编写基本的任务管理应用程序。我正在使用基本适配器来使用ListView。我想知道如何从列表中删除(一些)选中的值?我如何通过长按只删除一个值? 如果这与我的适配器有效?我尝试了几个选项,但没有任何效果。 这是我的代码。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <Button
        android:id="@+id/btn1"
        android:layout_width="50dp"
        android:layout_height="40dp"
        android:layout_alignParentRight="true"
        android:text="\u2713"
        android:background="@drawable/add_btn"
        android:onClick="knopka2"/>
    <EditText
        android:id="@+id/input"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@id/btn1"
        android:hint="put your task here"/>
    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:divider="@drawable/deriver"
        android:layout_below="@+id/input"
        android:layout_centerHorizontal="true"
        android:choiceMode="multipleChoice" />
    <TextView
        android:id="@+id/ttl"
        android:layout_below="@id/listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/tryClear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/ttl"
        android:onClick="tryClear"
        />
</RelativeLayout>

这是我的活动:

public class Trird extends AppCompatActivity {
        Button btn;
        EditText input4;
        TextView ttl;
        ListView list;
        public static ArrayList<String> taskList = new ArrayList<String>();
        SparseBooleanArray sparseBooleanArray;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.third);
            input4 = (EditText) findViewById(R.id.input);
            btn = (Button) findViewById(R.id.btn1);
            list = (ListView) findViewById(R.id.listView);
            ttl = (TextView)findViewById(R.id.ttl);

        }

        public String[] putToArray() {
            String ag = input4.getText().toString().trim();
            if (ag.length() != 0) {
                taskList.add(ag);
                input4.setText("");
            }
            String[] abc = taskList.toArray(new String[taskList.size()]);
            return abc;
        }

        public void knopka2(View v) {
            final String[] ListViewItems = putToArray(); //
            list = (ListView) findViewById(R.id.listView);
            list.setAdapter(new MyAdapter(ListViewItems, this));

            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View tv, int i, long id) {
                    ///tv.setBackgroundColor(Color.YELLOW);
                    ///ttl.setText("selected: " + list.getAdapter().getItem(i));
                    sparseBooleanArray = list.getCheckedItemPositions();

                    String ValueHolder = "";
                    int a = 0;
                    while (a < sparseBooleanArray.size()) {
                        if (sparseBooleanArray.valueAt(a)) {
                            ValueHolder += ListViewItems[sparseBooleanArray.keyAt(a)] + ",";
                        }
                        a++;
                    }
                    ValueHolder = ValueHolder.replaceAll("(,)*$", "");
                    Toast.makeText(Trird.this, "ListView Selected Values = " + ValueHolder, Toast.LENGTH_LONG).show();

                    if(ValueHolder!=null){
                        taskList.remove(ValueHolder);
                    }
                }
            });
        }

    }

这是我的适配器:

public class MyAdapter extends BaseAdapter {
    private final Context context;//Context for view creation
    private final String[] data;//raw data
    public MyAdapter(String[] data, Context context){
        this.data=data;
        this.context=context;
    }
    //how many views to create
    public int getCount() {
        return data.length;
    }
    //item by index (position)
    public Object getItem(int i) {
        return data[i];
    }
    //ID => index of given item
    public long getItemId(int i) {
        return i;
    }
    //called .getCount() times - for each View of item in data
    public View getView(int i, View recycleView, ViewGroup parent) {
        if(recycleView==null)recycleView = LayoutInflater.from(context).inflate(R.layout.item,null);
        ((TextView)recycleView).setText(data[i]);//show relevant text in reused view
        return recycleView;
    }
}

这就是ListView中的项目。

<CheckedTextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="24sp"
    android:drawableRight="?android:attr/listChoiceIndicatorMultiple"
     />

1 个答案:

答案 0 :(得分:0)

问题是您正在尝试使用 ListView 删除方法删除项目。

只需使用适配器的remove()方法从列表中删除所选项目。

可能的方法是:

CheckedTextView checkedText= baseAdapter.getItem([POSITION OF THE SELECTED ITEM]);
baseAdapter.remove(checkedText);

baseAdapter.notifyDataSetChanged();

将此代码放入所需的按钮单击,然后就可以了。