Java 从listview中删除所选项目不工作
因此,我有一个listview,并试图删除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
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作为更新的答案。我这样做了,应用程序运行,但该项不会从列表中删除;只是不做标记不是真的。。我不明白:(