2012-02-28 119 views
1

我的列表視圖獲取保存在本地數據庫中的信息並顯示信息。我正在修改點擊列表視圖項目時發生的情況。我想刪除它們,有人可以幫我解決這個問題,而使用我的代碼?先謝謝你!製作ListView項目可點擊故障

public class Notepad extends ListActivity { 
    public static final int INSERT_ID = Menu.FIRST; 
    EditText notes; 
    Button add; 
    ListView lv; 
    String currentDateTimeString = DateFormat.getDateInstance().format(
      new Date()); 

    private NotesDbAdapter mDbHelper; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.notepad_list); 
     mDbHelper = new NotesDbAdapter(this); 
     mDbHelper.open(); 
     fillData(); 
     Button add = (Button) findViewById(R.id.addNote); 
     // ListView lv = (ListView) findViewById(R.id.list); 

     add.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 

       createNote(); 

      } 
     }); 
     // lv.setOnItemClickListener(new OnItemClickListener() { 
     // 
     // public void onItemClick(AdapterView<?> parent, View view, 
     // int position, long id) { 
     // // When clicked, show a toast with the TextView text 
     // 
     // try { 
     // Toast.makeText(getApplicationContext(), 
     // ((TextView) view).getText(), Toast.LENGTH_SHORT) 
     // .show(); 
     // 
     // } catch (ClassCastException e) { 
     // Toast.makeText(getApplicationContext(), "Error", 
     // Toast.LENGTH_SHORT).show(); 
     // } 
     // 
     // }; 
     // 
     // }); 
    } 

    private void createNote() { 
     EditText notes = (EditText) findViewById(R.id.note); 
     String noteName = notes.getText().toString(); 
     Calendar c = Calendar.getInstance(); 
     int seconds = c.get(Calendar.SECOND); 
     int minutes = c.get(Calendar.MINUTE); 
     int hour = c.get(Calendar.HOUR); 
     mDbHelper.createNote(noteName + " Entered at " + hour + ":" + minutes 
       + ":" + seconds, ""); 

     fillData(); 
    } 

    private void fillData() { 
     // Get all of the notes from the database and create the item list 
     Cursor c = mDbHelper.fetchAllNotes(); 
     startManagingCursor(c); 

     String[] from = new String[] { NotesDbAdapter.KEY_TITLE }; 
     int[] to = new int[] { R.id.text1 }; 

     // Now create an array adapter and set it to display using our row 
     SimpleCursorAdapter notes = new SimpleCursorAdapter(this, 
       R.layout.notes_row, c, from, to); 
     setListAdapter(notes); 
    } 
} 

我的ListView:

<ListView 
     android:id="@id/android:list" 
     android:layout_width="wrap_content" 
     android:layout_height="402dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/note" > 
    </ListView> 

回答

0

我在我的應用程序做的,是覆蓋SimpleCursorAdapter.setViewBinder()設置從DB ListView控件內查看與ID(_ID)的標籤,並從數據庫中刪除此ID在setOnItemClickListener()並刷新適配器。這樣的事情:

 SimpleCursorAdapter notes = new SimpleCursorAdapter(this, 
       R.layout.notes_row, c, from, to); 

    notes.setViewBinder(new SimpleCursorAdapter.ViewBinder() { 

public boolean setViewValue(View view, Cursor cursor, int column) 
{ 
TextView tv = (TextView) view; 
view.setTag=cursor.getInt(cursor.getColumnIndex ("_id")); // You need to include the _id in the query 
tv.setText(String.Valueof(cursor.getInt(cursor.getColumnIndex (NotesDbAdapter.KEY_TITLE)))); 
return true; 
} 
}); 

     lv.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 

     TextView tv=(TextView) view; 
    String ID=view.getTag(); 
    // Delete ID from the DB 
    notes.notifyDataSetChanged(); 

     }; 

     });  
    setListAdapter(notes); 


    } 
} 
+0

我不知道我知道你的意思 – 2012-02-28 09:57:11

+1

我從你的問題中瞭解到你想要刪除在ListView中點擊的項目。問題是你不能從ListView鏈接回數據庫。這是我的答案。數據庫中的每個項目都有_id,並且viewBinder(最初從DB填充LV)將LV中每個項目(R.id.text1)的標籤設置爲這個_id。當您單擊該項目時,監聽器使用該項目的標籤(之前設置)來引用數據庫,從數據庫中刪除該行,然後刷新LV以獲取沒有單擊項目的新數據 – 2012-02-28 10:18:12

+0

好吧,謝謝,我明白了那完全,對不起。但截至目前,我在點擊時訪問我的列表視圖項目時遇到了困難。我不知道如何訪問我的列表,在我的XML。 – 2012-02-28 10:21:51

0

您在您的ListView就像你上的按鈕添加添加onItemClickListener。 如果他們單擊某個項目,則使用sql查詢刪除本地數據庫中的該項目。我假設你可以選擇你可以使用SQL刪除它的數據。

之後,只需重新初始化列表。

這是最簡單的方法:)

雖然我想你可以更好地使用長按則正常的按。 只是,項目將不會被意外

+0

事情是當我添加偵聽器,我得到一個空指針異常。我還沒有找到解決辦法。 – 2012-02-28 09:42:01

1

onListItemClick刪除你有位置和Remove從動態數組(向量或列表)像vector.remove(position);。如果你想從數據庫中移除,而且從Database.After這個你刪除只寫.....

adapter.notifyDataSetChanged(); 
+0

我的問題是我不知道如何訪問列表項,我得到一個空指針異常,然後我可以嘗試你給我的那段代碼。 – 2012-02-28 09:44:53

+0

把你的錯誤,爲什麼問這個? – 2012-02-28 09:46:29

+0

我在列表視圖代碼中得到一個空指針異常,我註釋掉了。病後logcat – 2012-02-28 09:55:36