2012-02-28 135 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