2012-02-28 13 views
1

My Listviewは、ローカルデータベースに保存された情報を取得し、その情報を表示します。私はリストビューの項目をクリックすると何が起こるかを変更しています。私はそれらを削除したい、私のコードを使用して誰もこの問題で私を助けることができますか?前もって感謝します!ListViewアイテムの作成Clickable Trouble

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

を書き、DBからのID(_ID)とリストビュー内のビューのタグを設定し、DBからこのIDを削除するにはSimpleCursorAdapter.setViewBinder()をオーバーライドしています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

私はあなたが何を意味しているのかわかりません –

+1

あなたの質問から理解することは、ListViewでクリックしたアイテムを削除したいということです。問題は、ListViewからDBにリンクすることができないことです。これが私の答えです。 DB内の各アイテムは_idを持ち、viewBinder(最初はDBからLVを埋めます)は、LVの各アイテム(質問内のR.id.text1)のタグをこの_idに設定します。アイテムをクリックすると、リスナーはアイテムのタグ(先に設定)を使用してDBを参照し、DBからこの行を削除してから、LVをリフレッシュしてクリックしたアイテムなしで新しいデータを取得します –

+0

それは完全に、申し訳ありません。しかし今のところ、私はクリックしたときに私のリストビューの項目にアクセスするのに驚いた。私は私のXMLに私のリストにアクセスする方法がわかりません。 –

0

は、あなたがボタンを追加するのとまったく同じように、あなたのListViewにonItemClickListenerを追加します。 アイテムをクリックすると、SQLクエリを使用してローカルデータベースのアイテムを削除します。私はあなたがSQLを使用してそれを削除することができますデータを選択できるので、私は仮定します。

その後、リストを再初期化するだけです。

私はあなたがより良い、通常のプレスをlongpressを使用することができると思いますが、最も簡単な方法:)

です。あなたはDatabase.Afterこのあなたから削除また、データベースから削除します.IF 項目が事故

+0

私がリスナーを追加すると、nullポインタ例外が発生します。私はその周りに道を見つけることができなかった。 –

1

onListItemClickによって削除されないだけで、あなたは位置とRemoveそれ動的配列から(ベクタまたはリスト)と同様にvector.remove(position);を手に入れましたただ.....私は私のアプリで何

adapter.notifyDataSetChanged(); 
+0

私の問題は、リスト項目にアクセスする方法がわからない、ヌルポインタ例外が発生した場合、私が与えたコードを試すことができます。 –

+0

あなたのエラーを記入し、なぜこれを尋ねますか? –

+0

私がコメントアウトしたリストビューコードでは、nullポインタ例外が発生します。悪い投稿logcat –

関連する問題