2017-12-16 7 views
0

ListView.CHOICE_MODE_MULTIPLE_MODALでsetChoiceModeが実装されているアプリケーションでlistviewを使用しています。リストビューを長押しすると、項目を選択できますが、その後に画面の向きが変更されると、アクションバーが邪魔になります。ListView-setChoiceModeで方向が異なる場合CHOICE_MODE_MULTIPLE_MODAL

私のコードはportrait mode & landscape modeでこの

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    adapter = new ItemListAdapter(); 
    listView.setAdapter(adapter); 
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 

    listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 
     @Override 

     public void onItemCheckedStateChanged(ActionMode actionMode, int position, long l, boolean b) { 
      final int checkedItemCount = listView.getCheckedItemCount(); 
      actionMode.setTitle(checkedItemCount + " Selected"); 
      /*get the selected items*/ 
     } 

     @Override 
     public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { 
      actionMode.getMenuInflater().inflate(R.menu.menu_listview_delete, menu); 
      return true; 
     } 

     @Override 
     public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { 
      return false; 
     } 

     @Override 
     public boolean onActionItemClicked(final ActionMode actionMode, MenuItem menuItem) { 
      switch (menuItem.getItemId()){ 
       case R.id.delete_item: 
        /*delete selected items*/ 
        return true; 
       default: 
        return false; 
      } 
     } 

     @Override 
     public void onDestroyActionMode(ActionMode actionMode) { 
      adapter.removeSelection(); 
     } 
    }); 
} 

画像のように見えるバックボタンが押された場合は、それぞれの選択した項目を削除しようとすると、deleted.then得ることはありませんとき、それは(0 &として選択した項目を示してい私のアプリケーションアクティビティで実装されているランドスケープモードで)、アクションバーの色は白に変わります。 |画面サイズconfigChanges = "オリエンテーション:

一つの解決策は、マニフェスト

アンドロイドに下記の使用している

(ランドスケープモードでは、他の方法の選択項目にしようと肖像画で同じを削除するには、回転させたときに同じことが起こります) "

これを使用すると、方向変更時にアクティビティが再作成されません。ポートレートとランドスケープのレイアウトが異なるため、方向変更時にアクティビティレクリエーションが必要です。

オリエンテーションが変更されたためにアクティビティが再作成されるため、のsetMultiChoiceModeListenerが毎回呼び出されるという問題があります。

誰かが問題に取り組むことができますか?ありがとう!

答えて

0

これらの方法を使用して、選択した項目の値を保存および復元します。

@Override 
public void onSaveInstanceState(Bundle outState) { 
    outState.putInt("count",checkedItemCount); 
    super.onSaveInstanceState(outState); 
} 

そして、ここで

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState != null) { 
     //will return value of selecteditems 
     int countedItems = savedInstanceState.getInt("count"); 

    } 
} 

は、詳細については、リンクの方法のonCreateそれを復元:
How to use onSavedInstanceState example please

+0

は、私はこの前にも試みたが、問題は、カウント値が復元されますが、選択されていますアイテムは削除されません。他の提案はありますか? – Black

+0

誰かが助けることができますか? – Black

+0

アイテムを削除するコードはどこにありますか? – InziKhan

関連する問題