Java 单击从listview中删除所选项目

Java 单击从listview中删除所选项目,java,android,android-layout,android-listview,onclick,Java,Android,Android Layout,Android Listview,Onclick,因此,我有一个listview,我希望当我单击一个按钮时,它确实会从listview中删除所选项目。我的listview在xml文件中的定义如下,这就是它的可选性: <ListView android:id="@+id/listView1" android:layout_width="200dp" android:layout_height="100dp" android:layout_alignLeft="@+id/butt

因此,我有一个listview,我希望当我单击一个按钮时,它确实会从listview中删除所选项目。我的listview在xml文件中的定义如下,这就是它的可选性:

<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>
>

到目前为止,我的java代码没有错误,但我的应用程序在启动时崩溃:

public class MainActivity extends ListActivity {

    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() {
                        @Override
                        public void onClick(View v) {
                            /** Getting the checked items from the listview */
                            SparseBooleanArray checkedItemPositions = getListView().getCheckedItemPositions();


                            for(int i=itemPos-1; i >= 0; i--){
                                if(checkedItemPositions.get(i)){
                                    adapter.remove(list.get(i));
                                }
                            }
                            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;

          }
    });}}
public类MainActivity扩展了ListActivity{
按钮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=getListView().GetCheckEditePositions();
对于(int i=itemPos-1;i>=0;i--){
if(checkedItemPositions.get(i)){
adapter.remove(list.get(i));
}
}
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=位置;
}
});}}
logcat

11-03 13:58:28.496: E/Trace(624): error opening trace file: No such file or directory (2)
11-03 13:58:28.776: D/dalvikvm(624): GC_FOR_ALLOC freed 125K, 3% free 6156K/6343K, paused 41ms, total 43ms
11-03 13:58:28.866: D/dalvikvm(624): GC_FOR_ALLOC freed 1K, 4% free 6498K/6727K, paused 23ms, total 23ms
11-03 13:58:28.926: D/dalvikvm(624): GC_FOR_ALLOC freed 343K, 9% free 6309K/6919K, paused 48ms, total 48ms
11-03 13:58:28.936: I/dalvikvm-heap(624): Grow heap (frag case) to 7.085MB for 921616-byte allocation
11-03 13:58:29.006: D/dalvikvm(624): GC_CONCURRENT freed <1K, 9% free 7209K/7879K, paused 32ms+3ms, total 69ms
11-03 13:58:29.156: D/dalvikvm(624): GC_FOR_ALLOC freed 0K, 9% free 7209K/7879K, paused 28ms, total 28ms
11-03 13:58:29.166: I/dalvikvm-heap(624): Grow heap (frag case) to 7.476MB for 409936-byte allocation
11-03 13:58:29.216: D/dalvikvm(624): GC_CONCURRENT freed 0K, 9% free 7609K/8327K, paused 25ms+4ms, total 50ms
11-03 13:58:29.216: D/dalvikvm(624): WAIT_FOR_CONCURRENT_GC blocked 25ms
11-03 13:58:29.416: D/gralloc_goldfish(624): Emulator without GPU emulation detected.
11-03 14:00:42.286: I/Choreographer(624): Skipped 162 frames!  The application may be doing too much work on its main thread.
11-03 14:00:42.656: I/Choreographer(624): Skipped 44 frames!  The application may be doing too much work on its main thread.
11-03 14:03:55.266: E/Trace(672): error opening trace file: No such file or directory (2)
11-03 14:03:56.456: D/dalvikvm(672): GC_FOR_ALLOC freed 128K, 3% free 6156K/6343K, paused 35ms, total 36ms
11-03 14:03:56.546: D/dalvikvm(672): GC_FOR_ALLOC freed 1K, 4% free 6498K/6727K, paused 24ms, total 24ms
11-03 14:03:56.576: D/dalvikvm(672): GC_FOR_ALLOC freed 343K, 9% free 6309K/6919K, paused 24ms, total 24ms
11-03 14:03:56.586: I/dalvikvm-heap(672): Grow heap (frag case) to 7.085MB for 921616-byte allocation
11-03 14:03:56.656: D/dalvikvm(672): GC_CONCURRENT freed <1K, 9% free 7209K/7879K, paused 22ms+14ms, total 65ms
11-03 14:03:56.776: D/dalvikvm(672): GC_FOR_ALLOC freed 0K, 9% free 7209K/7879K, paused 22ms, total 22ms
11-03 14:03:56.776: I/dalvikvm-heap(672): Grow heap (frag case) to 7.476MB for 409936-byte allocation
11-03 14:03:56.826: D/dalvikvm(672): GC_CONCURRENT freed 0K, 9% free 7609K/8327K, paused 15ms+4ms, total 47ms
11-03 14:03:56.826: D/dalvikvm(672): WAIT_FOR_CONCURRENT_GC blocked 15ms
11-03 14:03:57.046: D/gralloc_goldfish(672): Emulator without GPU emulation detected.
11-03 14:03:57.516: I/Choreographer(672): Skipped 42 frames!  The application may be doing too much work on its main thread.
11-03 14:52:41.686: E/Trace(720): error opening trace file: No such file or directory (2)
11-03 14:52:42.576: D/dalvikvm(720): GC_FOR_ALLOC freed 75K, 3% free 6147K/6275K, paused 41ms, total 42ms
11-03 14:52:42.666: D/dalvikvm(720): GC_FOR_ALLOC freed 1K, 3% free 6490K/6663K, paused 28ms, total 28ms
11-03 14:52:42.716: D/dalvikvm(720): GC_FOR_ALLOC freed 343K, 9% free 6300K/6855K, paused 24ms, total 24ms
11-03 14:52:42.726: I/dalvikvm-heap(720): Grow heap (frag case) to 7.078MB for 921616-byte allocation
11-03 14:52:42.806: D/dalvikvm(720): GC_CONCURRENT freed <1K, 8% free 7200K/7815K, paused 23ms+24ms, total 78ms
11-03 14:52:42.926: D/dalvikvm(720): GC_FOR_ALLOC freed 0K, 8% free 7200K/7815K, paused 22ms, total 22ms
11-03 14:52:42.926: I/dalvikvm-heap(720): Grow heap (frag case) to 7.468MB for 409936-byte allocation
11-03 14:52:42.976: D/dalvikvm(720): GC_CONCURRENT freed 0K, 9% free 7601K/8263K, paused 14ms+4ms, total 48ms
11-03 14:52:42.976: D/dalvikvm(720): WAIT_FOR_CONCURRENT_GC blocked 14ms
11-03 14:52:43.017: D/AndroidRuntime(720): Shutting down VM
11-03 14:52:43.017: W/dalvikvm(720): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
11-03 14:52:43.036: E/AndroidRuntime(720): FATAL EXCEPTION: main
11-03 14:52:43.036: E/AndroidRuntime(720): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.devoir3/com.example.devoir3.MainActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.os.Looper.loop(Looper.java:137)
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.app.ActivityThread.main(ActivityThread.java:4745)
11-03 14:52:43.036: E/AndroidRuntime(720):  at java.lang.reflect.Method.invokeNative(Native Method)
11-03 14:52:43.036: E/AndroidRuntime(720):  at java.lang.reflect.Method.invoke(Method.java:511)
11-03 14:52:43.036: E/AndroidRuntime(720):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-03 14:52:43.036: E/AndroidRuntime(720):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-03 14:52:43.036: E/AndroidRuntime(720):  at dalvik.system.NativeStart.main(Native Method)
11-03 14:52:43.036: E/AndroidRuntime(720): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.app.ListActivity.onContentChanged(ListActivity.java:243)
11-03 14:52:43.036: E/AndroidRuntime(720):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:259)
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.app.Activity.setContentView(Activity.java:1867)
11-03 14:52:43.036: E/AndroidRuntime(720):  at com.example.devoir3.MainActivity.onCreate(MainActivity.java:38)
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.app.Activity.performCreate(Activity.java:5008)
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
11-03 14:52:43.036: E/AndroidRuntime(720):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
11-03 14:52:43.036: E/AndroidRuntime(720):  ... 11 more
11-03 13:58:28.496:E/Trace(624):打开跟踪文件时出错:没有这样的文件或目录(2)
11-03 13:58:28.776:D/dalvikvm(624):释放125K的所有物质的GC_,3%的自由6156K/6343K,暂停41ms,总计43ms
11-03 13:58:28.866:D/dalvikvm(624):释放1K的所有数据的GC_,4%的空闲6498K/6727K,暂停23ms,总计23ms
11-03 13:58:28.926:D/dalvikvm(624):释放343K的所有物质的GC_,9%释放6309K/6919K,暂停48毫秒,总计48毫秒
11-03 13:58:28.936:I/dalvikvm堆(624):为921616字节分配将堆(frag大小写)增长到7.085MB

11-03 13:58:29.006:D/dalvikvm(624):GC_并发释放您的活动扩展
列表活动
,如果您从
活动扩展
,您应该没有问题

“但是我的应用程序在启动时崩溃:”-出现了什么错误?请发布日志。问题使用日志编辑。您可能需要发布活动代码的其余部分。您的列表声明或您如何将其设置为适配器似乎存在问题。当您按下“button3”按钮或启动时,您的应用程序是否会崩溃?您的应用程序正在崩溃,因为您正在扩展ListActivity,这要求您的布局中有一个id为android.R.id.list的listview。按照我提供给您的链接查看如何修复它。我这样做了,然后我得到一个错误:对于类型new View.OnClickListener(){}方法getListView()未定义,这是正确的,但是您在哪里使用此方法?我将尝试更好地解释:ListActivity是一个默认的android活动,它只包含一个ListView,并且它具有此方法“getListView()”如果您想获得对它的引用。在活动中,您有按钮和其他东西,因此您必须创建自己的活动。将“getListView()”替换为“listView1”或“listView2”(我不知道您需要什么)。谢谢,这就是问题所在。不过,当我启动应用程序并单击某个项目上的“删除”按钮时,它只是取消了该项目的标记,并没有将其从列表中删除