2016-03-20 11 views
1

私は何か変わったことに気づいたときに私のアプリケーションに作成、削除、更新を実装していました。ここに私の状況は次のとおりです。App - RecyclerView/SQLiteが奇妙に動く

別紙A:

私は、「ノート」を作成したユニークな(アラーム&通知)として、そのIDを使用して、それを通知してアラームを設定した場合、その後にも(それを削除しようとしましたキャンセルとして)、何も起こりません。通知はまだそこにあり、ですが、私のログは、キャンセルメソッドが呼ばれたことを示しています。

別紙B:

I アプリを再起動した場合(出口は、その後の復帰)ノートはまだそこにあります。を削除した場合、通知が消えます。それを完全に削除して再起動してください。

DeleteItem方法:

public void deleteItem(final int position, final RecyclerView rv) { 
    Log.d("RecyclerView", "deleteItem method called at: " + position + " on " + data.get(position).getTitle() + " of ID " + data.get(position).getID()); 
    // BUG position is the same - identical titles called - funky titles appearing from other positions 
    // BUG Other snackbar showing causes dismissal of original Snackbar and deletes note 
    final Info currentNote = data.get(position); 
    final int originalPosition = position; 

    data.remove(position); 
    // Removes Info object at specified position 

    // notifyDataSetChanged(); 
    notifyItemRemoved(position); 
    // Notifies the RV that item has been removed 

    /* HOW DOES ALL THIS WORK?? 
    As an ArrayList that contains all Info objects has been created in RecyclerAdapter, 
    calling the delete method and passing data.get(position) returns the Info object at that position 
    as every Info object is set in order to the RV item, which makes deleteNote in DB work 
    */ 

    Snackbar snackbar = Snackbar.make(rv, "Note Forgotten!", Snackbar.LENGTH_LONG) 
      // .make(View where Snackbar is shown, Message on Snackbar, LENGTH_INDEFINITE means Snackbar is shown until dismissed manually) 
      // NOTE If not wrapped in COORDINATORLAYOUT, SWIPE TO DISMISS DOES NOT WORK 
      .setAction("UNDO", new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Log.d("RV Adapter", "Note replaced on: " + currentNote.getTitle()); 
        Snackbar.make(rv, "Note replaced!", Snackbar.LENGTH_LONG).show(); 
        data.add(originalPosition, currentNote); 
        notifyItemInserted(originalPosition); 
       } 
      }); 
    // Customizing Snackbar 
    // Changing message text color 
    snackbar.setActionTextColor(Color.RED); 

    // Changing action button text color 
    View sbView = snackbar.getView(); 
    TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); 
    textView.setTextColor(Color.YELLOW); 

    snackbar.setCallback(new Snackbar.Callback() { 
     @Override 
     public void onDismissed(Snackbar snackbar, int event) { 
      switch (event) { 
       case DISMISS_EVENT_ACTION: 
        // Snackbar was dismissed via click on action button 
        break; 

       case DISMISS_EVENT_SWIPE: 
        // Snackbar was dismissed via manual swipe 
        break; 

       case DISMISS_EVENT_MANUAL: 
        // Snackbar was dismissed via dismiss() method called 
        break; 

       case DISMISS_EVENT_CONSECUTIVE: 
        // Snackbar was dismissed via another Snackbar being shown 
        break; 

       case DISMISS_EVENT_TIMEOUT: 
        Log.d("RV Adapter", "Note deleted on: " + currentNote.getTitle()); 
        // Snackbar was dismissed via timeout 
        DBInfo dbInfo = new DBInfo(context); 
        dbInfo.deleteNote(currentNote); 
        // Deletes RV item/position's Info object 

        boolean alarmSet = (PendingIntent.getBroadcast(context, currentNote.getID(), 
          new Intent(context, AlarmReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT) != null); 

        Log.d("RecyclerAdapter", "Item: " + currentNote.getTitle() + " of ID: " + currentNote.getID() + " has Alarm Set value of " + alarmSet); 

        // if statement to determine if there is an alarm set 
        if (alarmSet) { 
         // Cancel Alarm 
         // Get intent originally used to invoke AlarmReceiver.class 
         Intent cancelIntent = new Intent(context, AlarmReceiver.class); 
         cancelIntent.putExtra("Purpose", "Cancel Alarm"); 
         Log.d("RecyclerAdapter", "PendingIntent cancelled of ID: " + currentNote.getID()); 
         PendingIntent pendingIntent = PendingIntent.getBroadcast(context, currentNote.getID(), cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
         // Grab same PendingIntent that was used to set Alarm 
         AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
         alarmManager.cancel(pendingIntent); 
         Log.d("RecyclerAdapter", "Alarm Cancelled on: " + currentNote.getTitle()); 

         NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
         manager.cancel(currentNote.getID()); 
         Log.d("RecyclerAdapter", "Notification Cancelled on: " + currentNote.getTitle()); 
        } 
      } 
     } 
    }); 

    snackbar.show(); 
} 

私のログ...

別紙A用:別紙Bのための

03-20 19:05:26.912 32245-32245/owensetiawan.friendlymatch.todolist  D/insertNewNote method: Position at: 4 
03-20 19:05:26.912 32245-32245/owensetiawan.friendlymatch.todolist D/DBInfo Owen: Insert method called. 
03-20 19:05:26.942 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: #3 mView = null 
03-20 19:05:26.972 32245-32245/owensetiawan.friendlymatch.todolist D/RecyclerView: onCreateVH called! 
03-20 19:05:26.972 32245-32245/owensetiawan.friendlymatch.todolist D/RecyclerView: onBindVH called: Deep 
03-20 19:05:27.062 32245-32245/owensetiawan.friendlymatch.todolist D/AbsListView: Get MotionRecognitionManager 
03-20 19:05:27.062 32245-32245/owensetiawan.friendlymatch.todolist E/MotionRecognitionManager: mSContextService = [email protected] 
03-20 19:05:27.062 32245-32245/owensetiawan.friendlymatch.todolist E/MotionRecognitionManager: motionService = [email protected]3ffac67 
03-20 19:05:27.062 32245-32245/owensetiawan.friendlymatch.todolist E/MotionRecognitionManager: motionService = [email protected]3ffac67 
03-20 19:05:27.102 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: #1 mView = com.android.internal.policy.PhoneWindow$DecorView{e75147b V.E...... R.....I. 0,0-0,0} 
03-20 19:05:27.122 32245-32245/owensetiawan.friendlymatch.todolist E/ViewRootImpl: sendUserActionEvent() mView == null 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: Current page list: 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #0: page 1393 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #1: page 1394 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #2: page 1395 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: Current page list: 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #0: page 1393 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #1: page 1394 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #2: page 1395 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: Current page list: 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #0: page 1393 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #1: page 1394 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #2: page 1395 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: Current page list: 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #0: page 1393 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #1: page 1394 
03-20 19:05:27.132 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #2: page 1395 
03-20 19:05:27.182 32245-32259/owensetiawan.friendlymatch.todolist D/mali_winsys: new_window_surface returns 0x3000, [1592x2395]-format:1 
03-20 19:05:27.232 32245-32245/owensetiawan.friendlymatch.todolist W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView) 
03-20 19:05:27.292 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1 
03-20 19:05:27.292 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: MSG_RESIZED: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: Current page list: 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #0: page 1393 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #1: page 1394 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #2: page 1395 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: Current page list: 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #0: page 1393 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #1: page 1394 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #2: page 1395 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: Current page list: 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #0: page 1393 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #1: page 1394 
03-20 19:05:27.302 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #2: page 1395 
03-20 19:05:27.312 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: Current page list: 
03-20 19:05:27.312 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #0: page 1393 
03-20 19:05:27.312 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #1: page 1394 
03-20 19:05:27.312 32245-32245/owensetiawan.friendlymatch.todolist I/ViewPager: #2: page 1395 
03-20 19:05:28.042 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: ViewPostImeInputStage processPointer 0 
03-20 19:05:28.132 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: ViewPostImeInputStage processPointer 1 
03-20 19:05:28.132 32245-32245/owensetiawan.friendlymatch.todolist D/We have liftoff!: DPD Listener called! 
03-20 19:05:28.132 32245-32245/owensetiawan.friendlymatch.todolist D/onDateSet method: Date set for: 20/2/2016 
03-20 19:05:28.132 32245-32245/owensetiawan.friendlymatch.todolist D/Alarm: Set Alarm method called on: !20/2/2016 
03-20 19:05:28.132 32245-32245/owensetiawan.friendlymatch.todolist D/DBInfo: Note retrieved ID of: 5 
03-20 19:05:28.242 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: #3 mView = null 
03-20 19:05:28.262 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: #1 mView = android.widget.LinearLayout{d7b9729 V.E...... ......I. 0,0-0,0} 
03-20 19:05:28.272 32245-32245/owensetiawan.friendlymatch.todolist E/ViewRootImpl: sendUserActionEvent() mView == null 
03-20 19:05:28.312 32245-32259/owensetiawan.friendlymatch.todolist D/mali_winsys: new_window_surface returns 0x3000, [928x176]-format:1 
03-20 19:05:28.322 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1 
03-20 19:05:28.342 32245-32245/owensetiawan.friendlymatch.todolist W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView) 
03-20 19:05:29.172 32245-32245/owensetiawan.friendlymatch.todolist D/AlarmReceiver: Deep called on: 20/3/2016 with ID of: 5 
03-20 19:05:29.172 32245-32245/owensetiawan.friendlymatch.todolist D/AlarmReceiver: Receiver called! 
03-20 19:05:30.312 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: #3 mView = null 
03-20 19:05:31.902 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: ViewPostImeInputStage processPointer 0 
03-20 19:05:32.312 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: ViewPostImeInputStage processPointer 1 
03-20 19:05:32.442 32245-32245/owensetiawan.friendlymatch.todolist D/RecyclerView: deleteItem method called at: 3 on Deep of ID 0 
03-20 19:05:35.772 32245-32245/owensetiawan.friendlymatch.todolist D/RV Adapter: Note deleted on: Deep 
03-20 19:05:35.792 32245-32245/owensetiawan.friendlymatch.todolist D/DBInfo: deleteNote method called on: Deep 
03-20 19:05:35.792 32245-32245/owensetiawan.friendlymatch.todolist D/RecyclerAdapter: Item: Deep of ID: 0 has Alarm Set value of true 
03-20 19:05:35.792 32245-32245/owensetiawan.friendlymatch.todolist D/RecyclerAdapter: PendingIntent cancelled of ID: 0 
03-20 19:05:35.792 32245-32245/owensetiawan.friendlymatch.todolist D/RecyclerAdapter: Alarm Cancelled on: Deep 
03-20 19:05:35.802 32245-32245/owensetiawan.friendlymatch.todolist D/RecyclerAdapter: Notification Cancelled on: Deep 
03-20 19:05:39.852 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: ViewPostImeInputStage processKey 0 
03-20 19:05:39.952 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: ViewPostImeInputStage processKey 1 
03-20 19:05:40.662 32245-32245/owensetiawan.friendlymatch.todolist D/ViewRootImpl: #3 mView = null 

:ディープアップ方法を示し

03-20 21:30:56.382 31168-31168/owensetiawan.friendlymatch.todolist D/DBInfo: Columns created: [_id, note_title, note_content] 
03-20 21:30:56.382 31168-31168/owensetiawan.friendlymatch.todolist D/DBHelper Owen: Loading entries: 4 Date: Sun Mar 20 21:30:56 GMT+08:00 2016 
03-20 21:30:56.382 31168-31168/owensetiawan.friendlymatch.todolist D/ItemTouchHelper: Callback called! 
03-20 21:30:56.382 31168-31168/owensetiawan.friendlymatch.todolist D/Activity: performCreate Call Injection manager 
03-20 21:30:56.382 31168-31168/owensetiawan.friendlymatch.todolist I/InjectionManager: dispatchOnViewCreated > Target : owensetiawan.friendlymatch.todolist.MainActivity isFragment :false 
03-20 21:30:56.382 31168-31168/owensetiawan.friendlymatch.todolist D/SecWifiDisplayUtil: Metadata value : SecSettings2 
03-20 21:30:56.392 31168-31168/owensetiawan.friendlymatch.todolist D/ViewRootImpl: #1 mView = com.android.internal.policy.PhoneWindow$DecorView{1489836 I.E...... R.....ID 0,0-0,0} 
03-20 21:30:56.412 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerView: onCreateVH called! 
03-20 21:30:56.412 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerView: onBindVH called: Factory reset phone 
03-20 21:30:56.412 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerView: onCreateVH called! 
03-20 21:30:56.412 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerView: onBindVH called: Supermarket 
03-20 21:30:56.412 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerView: onCreateVH called! 
03-20 21:30:56.412 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerView: onBindVH called: Keepa 
03-20 21:30:56.412 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerView: onCreateVH called! 
03-20 21:30:56.412 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerView: onBindVH called: Deep 
03-20 21:30:56.432 31168-31183/owensetiawan.friendlymatch.todolist D/mali_winsys: new_window_surface returns 0x3000, [1440x2560]-format:1 
03-20 21:30:56.442 31168-31168/owensetiawan.friendlymatch.todolist I/InjectionManager: dispatchCreateOptionsMenu :owensetiawan.friendlymatch.todolist.MainActivity 
03-20 21:30:56.442 31168-31168/owensetiawan.friendlymatch.todolist I/InjectionManager: dispatchPrepareOptionsMenu :owensetiawan.friendlymatch.todolist.MainActivity 
03-20 21:30:56.442 31168-31168/owensetiawan.friendlymatch.todolist D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1 
03-20 21:30:56.462 31168-31168/owensetiawan.friendlymatch.todolist W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView) 
03-20 21:30:56.502 31168-31168/owensetiawan.friendlymatch.todolist I/Timeline: Timeline: Activity_idle id: [email protected] time:60508201 
03-20 21:30:56.742 31168-31168/owensetiawan.friendlymatch.todolist D/ViewRootImpl: #3 mView = null 
03-20 21:30:57.292 31168-31168/owensetiawan.friendlymatch.todolist D/ViewRootImpl: ViewPostImeInputStage processPointer 0 
03-20 21:30:57.462 31168-31168/owensetiawan.friendlymatch.todolist D/ViewRootImpl: ViewPostImeInputStage processPointer 1 
03-20 21:30:57.602 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerView: deleteItem method called at: 3 on Deep of ID 6 
03-20 21:31:00.942 31168-31168/owensetiawan.friendlymatch.todolist D/RV Adapter: Note deleted on: Deep 
03-20 21:31:00.952 31168-31168/owensetiawan.friendlymatch.todolist D/DBInfo: deleteNote method called on: Deep 
03-20 21:31:00.962 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerAdapter: Item: Deep of ID: 6 has Alarm Set value of true 
03-20 21:31:00.962 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerAdapter: PendingIntent cancelled of ID: 6 
03-20 21:31:00.962 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerAdapter: Alarm Cancelled on: Deep 
03-20 21:31:00.962 31168-31168/owensetiawan.friendlymatch.todolist D/RecyclerAdapter: Notification Cancelled on: Deep 

注意すなわち、を削除しないでください。また、2つのIDがの場合、アラームセットの場合はとなります。

私は迷っていますか?コンピュータを再起動する必要がありますか? Androidのバグ? ???????????????????????????????????????????????????????? ??????????? 何か答えが私の永遠の感謝を受けるでしょう。

+0

すべてのソリューションを呼ぶだろうか? – sasha

+0

まだ残念ながら、何もありません。 –

答えて

0

自分の位置が同期している可能性があなただけ

getPosition() 

を使用している場合、それはそれは、画面上の位置ですに関し、(あなたが現在位置を取得しているかどうかはわかりません)があり、コレクション内の位置ではありません。

あなたはRecyclerViewが使用するレイアウトマネージャへの参照を必要としてからまだ

GridLayoutManager layoutManager = ((GridLayoutManager)mRecyclerView.getLayoutManager()); 
int position = layoutManager.findFirstVisibleItemPosition() + position; 
+0

現在、onBindViewHolderで(int positionを介して)ポジションを受け取りました。返事が遅れて申し訳ありません。 –