2012-11-12 297 views
0

我想將項目添加到編輯文本下方的列表視圖。 這個完美的作品。如何使用刪除按鈕從列表視圖刪除項目android

現在我想能夠刪除一些條目。這是我無法弄清楚它是如何完成的。我正在執行刪除按鈕onclicklistener,但程序不斷崩潰。我認爲這是因爲刪除按鈕不存在。 我試着在網上找到東西,但從來沒有得到我可以使用的答案。 我可以幫助我,這將是一個巨大的幫助。

PS:並非所有的代碼是從我這裏,發現了一些示例代碼上:http://wptrafficanalyzer.in/blog/dynamically-add-items-to-listview-in-android/

這是我的主要活動:

/** Note that here we are inheriting ListActivity class instead of Activity class **/ 
    public class MainActivity extends ListActivity { 
    Button del; 
    ListView lv; 

    /** Items entered by the user is stored in this ArrayList variable */ 
    ArrayList<String> list = new ArrayList<String>(); 





    /** Declaring an ArrayAdapter to set items to ListView */ 
    ArrayAdapter<String> adapter; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 







     /** Setting a custom layout for the list activity */ 
     setContentView(R.layout.main); 

     del = (Button) findViewById(R.id.removeButton); 

     /** Reference to the button of the layout main.xml */ 
     Button btn = (Button) findViewById(R.id.btnAdd); 

     /** Defining the ArrayAdapter to set items to ListView */ 
     adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.nameText, list); 

     /** Defining a click event listener for the button "Add" */ 
     OnClickListener listener = new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       EditText edit = (EditText) findViewById(R.id.txtItem); 
       list.add(edit.getText().toString()); 
       edit.setText(""); 
       adapter.notifyDataSetChanged(); 

      } 
     }; 



     del.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       int pos = v.getId(); 
       System.out.println(pos); 
       Object toRemove = adapter.getItem(pos); 
       adapter.remove(toRemove); 
      } 
     }); 


     /** Setting the event listener for the add button */ 
     btn.setOnClickListener(listener); 

     /** Setting the adapter to the ListView */ 
     setListAdapter(adapter); 
    } 
} 

這裏是我的xml文件: 的main.xml

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/txtItem" 
     android:layout_width="240dp" 
     android:layout_height="wrap_content" 
     android:inputType="text" 
     android:hint="@string/hintTxtItem" 
    /> 

    <Button 
     android:id="@+id/btnAdd" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/lblBtnAdd" 
     android:layout_toRightOf="@id/txtItem" 
     android:onClick="removeAtomPayOnClickHandler" 

    /> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/txtItem" 
    /> 

    <TextView 
     android:id="@android:id/empty" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/txtItem" 
     android:text="@string/txtEmpty" 
     android:gravity="center_horizontal" 
    /> 



</RelativeLayout> 

item.xml

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" > 


    <TextView 
    android:id="@+id/nameText" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="15dp" 
    android:textSize="20sp" > 


    </TextView> 

    <Button 
    android:id="@+id/removeButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/remove" 
    android:layout_alignParentRight="true" 

    /> 

    </RelativeLayout> 

的logcat:

11-12 17:37:57.637: D/AndroidRuntime(302): Shutting down VM 
11-12 17:37:57.637: W/dalvikvm(302): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
11-12 17:37:57.667: E/AndroidRuntime(302): FATAL EXCEPTION: main 
11-12 17:37:57.667: E/AndroidRuntime(302): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.additemsdynami/com.example.additemsdynami.MainActivity}: java.lang.NullPointerException 
11-12 17:37:57.667: E/AndroidRuntime(302): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
11-12 17:37:57.667: E/AndroidRuntime(302): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-12 17:37:57.667: E/AndroidRuntime(302): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-12 17:37:57.667: E/AndroidRuntime(302): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-12 17:37:57.667: E/AndroidRuntime(302): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-12 17:37:57.667: E/AndroidRuntime(302): at android.os.Looper.loop(Looper.java:123) 
11-12 17:37:57.667: E/AndroidRuntime(302): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-12 17:37:57.667: E/AndroidRuntime(302): at java.lang.reflect.Method.invokeNative(Native Method) 
11-12 17:37:57.667: E/AndroidRuntime(302): at java.lang.reflect.Method.invoke(Method.java:521) 
11-12 17:37:57.667: E/AndroidRuntime(302): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-12 17:37:57.667: E/AndroidRuntime(302): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-12 17:37:57.667: E/AndroidRuntime(302): at dalvik.system.NativeStart.main(Native Method) 
11-12 17:37:57.667: E/AndroidRuntime(302): Caused by: java.lang.NullPointerException 
11-12 17:37:57.667: E/AndroidRuntime(302): at com.example.additemsdynami.MainActivity.onCreate(MainActivity.java:69) 
11-12 17:37:57.667: E/AndroidRuntime(302): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-12 17:37:57.667: E/AndroidRuntime(302): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
11-12 17:37:57.667: E/AndroidRuntime(302): ... 11 more 
+0

NullPointerException異常:■ – user1812765

+1

請加滿** **從您的logcat –

+0

堆棧跟蹤'德爾=(按鈕)findViewById(R.id.removeButton);'< - 這不會在你調用'setContentView()'之前的工作' – dmon

回答

1

的NullPointerException異常來自一個事實,你設置的活動內容視圖之前,你要設置的del值。在setContentView(view)之後移動del = findViewById(id)

至於刪除東西,你需要從ADAPTER中刪除不是列表。您不需要保留自己的項目副本(除非您將其用於其他項目),因爲陣列中存在項目列表。你需要調用adapter.remove(item)代替list.remove(item)

+0

移動del = fiendViewById(id)setContentView (查看) 也改變了列表,以適配器仍然得到相同的nullpointerexception – user1812765

+0

當我把Onclicklistener之間* // *應用程序不會崩潰,所以我認爲問題在那裏。 – user1812765

相關問題