Java 从listview中删除所选项目不工作

Java 从listview中删除所选项目不工作,java,android,android-listview,onclick,selecteditem,Java,Android,Android Listview,Onclick,Selecteditem,因此,我有一个listview,并试图删除listview中的选定项。到目前为止,我的代码如下: public class MainActivity extends Activity { Button button1; Button button3; Button button2; Button button4; ListView listView1; ListView listView2; Spinner s1; String

因此,我有一个listview,并试图删除listview中的选定项。到目前为止,我的代码如下:

public class MainActivity extends Activity {

    Button button1;
    Button button3;
    Button button2;
    Button button4;
    ListView listView1;
    ListView listView2;
    Spinner s1;
    String text;
    Integer i;
    SparseBooleanArray checkedItemPositions ;


    ArrayAdapter<String> adapter;
    ArrayAdapter<String> adapter2;
    int itemPos;
    ArrayList<String> list = new ArrayList<String>();
    ArrayList<String> list2 = new ArrayList<String>();

     @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button1 = (Button) findViewById(R.id.button1);
            button3 = (Button) findViewById(R.id.button3); 
            button4 = (Button) findViewById(R.id.button4); 
            button2 = (Button) findViewById(R.id.button2);
            s1 = (Spinner) findViewById(R.id.spinner1);
            listView1 = (ListView) findViewById(R.id.listView1);
            listView2 = (ListView) findViewById(R.id.listView2);



            adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_single_choice, list);
                listView1.setAdapter(adapter);

                button2.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {

                        String text = s1.getSelectedItem().toString();
                        list.add(text); 
                        adapter.notifyDataSetChanged();



                    }});

                adapter2 = new ArrayAdapter<String>(this,
                        android.R.layout.simple_list_item_single_choice, list2);
                    listView2.setAdapter(adapter2);

                    button1.setOnClickListener(new View.OnClickListener() {

                        public void onClick(View v) {

                            String text = s1.getSelectedItem().toString();
                            list2.add(text); 
                            adapter2.notifyDataSetChanged();



                        }});

                    button3.setOnClickListener(new View.OnClickListener() {  //part to remove item
                        @Override
                        public void onClick(View v) {
                            /** Getting the checked items from the listview */
                            SparseBooleanArray checkedItemPositions = listView1.getCheckedItemPositions();


                            for(int i=itemPos-1; i >= 0; i--){
                                if(checkedItemPositions.get(i)){
                                    adapter.remove(list.get(i));
                                    adapter.notifyDataSetChanged();
                                }
                            }
                            checkedItemPositions.clear();
                            adapter.notifyDataSetChanged();

                        }
                    });



     listView1.setOnItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {

            view.setSelected(true);

        itemPos = position;

      }});
    listView2.setOnItemClickListener(new OnItemClickListener() {
          @Override
          public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

                view.setSelected(true);

            itemPos = position;

          }
    });}}
公共类MainActivity扩展活动{
按钮1;
按钮3;
按钮2;
按钮4;
列表视图列表视图1;
ListView listView2;
旋转器s1;
字符串文本;
整数i;
SparseBooleanArray checkedItemPositions;
阵列适配器;
阵列适配器2;
int itemPos;
ArrayList=新建ArrayList();
ArrayList list2=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1=(按钮)findViewById(R.id.button1);
button3=(按钮)findViewById(R.id.button3);
button4=(按钮)findViewById(R.id.button4);
button2=(按钮)findViewById(R.id.button2);
s1=(喷丝器)findViewById(R.id.spinner1);
listView1=(ListView)findViewById(R.id.listView1);
listView2=(ListView)findViewById(R.id.listView2);
适配器=新阵列适配器(此,
android.R.layout.simple_list_item_single_choice,list);
listView1.setAdapter(适配器);
button2.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
String text=s1.getSelectedItem().toString();
列表。添加(文本);
adapter.notifyDataSetChanged();
}});
适配器2=新阵列适配器(此,
android.R.layout.simple_list_item_single_choice,list2);
listView2.setAdapter(适配器2);
button1.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
String text=s1.getSelectedItem().toString();
列表2.添加(文本);
adapter2.notifyDataSetChanged();
}});
button3.setOnClickListener(新视图。OnClickListener(){//删除项的部分
@凌驾
公共void onClick(视图v){
/**从listview获取选中的项*/
SparseBooleanArray CheckEditePositions=listView1.GetCheckEditePositions();
对于(int i=itemPos-1;i>=0;i--){
if(checkedItemPositions.get(i)){
adapter.remove(list.get(i));
adapter.notifyDataSetChanged();
}
}
checkedItemPositions.clear();
adapter.notifyDataSetChanged();
}
});
listView1.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
view.setSelected(true);
itemPos=位置;
}});
listView2.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
view.setSelected(true);
itemPos=位置;
}
});}}
在xml中定义的listview如下:

<ListView
    android:id="@+id/listView1"
    android:layout_width="200dp"
    android:layout_height="100dp"
    android:layout_alignLeft="@+id/button2"
    android:layout_below="@+id/textView2"
    android:choiceMode="singleChoice"
    android:background="@drawable/bg_key" > >
</ListView>
>
但是,当我点击delete时,它只是取消了项目的标记,根本没有将其从列表中删除。我不知道如何解决这个问题。我也是android/java的初学者


谢谢大家!

您还应该从列表中删除该项:

adapter.remove(list.get(i));
list.remove(i);
adapter.notifyDataSetChanged();
一般来说,它是有效的。但是,您可以使用一个技巧来创建适配器并再次添加它

...
list.remove(i);
//adapter.notifyDataSetChanged();
adapter = new ArrayAdapter<String>(MainActivity.this,
                android.R.layout.simple_list_item_single_choice, list);
listView1.setAdapter(adapter);
。。。
列表。删除(i);
//adapter.notifyDataSetChanged();
适配器=新阵列适配器(MainActivity.this,
android.R.layout.simple_list_item_single_choice,list);
listView1.setAdapter(适配器);

请在以下链接查看我的答案:


希望这将解决您的问题

它仍然会做同样的事情我添加了我的ListView的xml当我添加此内容时,我得到错误构造函数ArrayAdapter(new View.OnClickListener(){},int,ArrayList)未定义,抱歉。这应该更改为MainActivity.This作为更新的答案。我这样做了,应用程序运行,但该项不会从列表中删除;只是不做标记不是真的。。我不明白:(