RecyclerView onRestoreInstanceState Внутри BottomSheet не работает

Вы можете использовать self.removeFromSuperview()

// Completely agree with comments, change to ChatOverlay
class chatOverlay: UIView {  
    @IBAction func closeOverlay(_ sender: UIButton) {
        self.removeFromSuperview()
    }
}

Если вы хотите, чтобы он исчезал

// Again, completely agree with comments, change to ChatOverlay
class chatOverlay: UIView {
    @IBAction func closeOverlay(_ sender: UIButton) {
        UIView.animate(withDuration: 0.5, animations: {
            self.alpha = 0.0
        }) { (_) in
            self.removeFromSuperview()
        }
    }
}

Мне действительно интересно, как вы используя UIView внутри chatOverlay, когда вы только импортируете Foundation? Кроме того, не могу понять, почему в overlayAdd вы импортируете как Foundation, так и UIKit? UIKit сам импортирует Foundation. Самое большое совпадение ко мне - почему у вас есть класс overlayAdd? Не должна ли функция show быть более функцией create (вы не показываете ее, пока не добавите ее в качестве поднабора) и просто станьте частью chatOverlay? Что-то вроде:

// Completely agree with comments, change to ChatOverlay 
class chatOverlay: UIView {
    @IBAction func closeOverlay(_ sender: UIButton) {
    UIView.animate(withDuration: 0.5, animations: {
            self.alpha = 0.0
        }) { (_) in
            self.removeFromSuperview()
        }
    }

    static func create(withFrame: frame, tag: Int) -> UIView{
         let chatOverlay = xibLoad().chatOverlay()                  
         chatOverlay.frame = frame
         chatOverlay.tag = tag
         /*
         What in the world are you trying to do here???

         let view = chatOverlay

         return view

         get rid of these two completely useless lines!
         just return chatOverlay like below...
         */
         return chatOverlay
   }
}

, а затем в chatPage:

// Completely agree with comments, change to ChatPage
class chatPage: UIViewController {
    override func viewDidLoad(){
         view.addSubview(chatOverlay.create(withFrame: view.frame, tag: 101))
    }
}

0
задан Adam Hurwitz 19 January 2019 в 03:49
поделиться

1 ответ

В качестве обходного пути для сохранения состояния RecyclerView положение может быть сохранено в состоянии экземпляра.

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    if (contentRecyclerView != null)
        when (feedType) {
            MAIN.name, DISMISSED.name ->
                outState.putParcelable(CONTENT_RECYCLER_VIEW_STATE,
                        contentRecyclerView.layoutManager!!.onSaveInstanceState())
            SAVED.name ->
                outState.putInt(CONTENT_RECYCLER_VIEW_POSITION,
                        (contentRecyclerView.layoutManager as LinearLayoutManager)
                                .findLastVisibleItemPosition())
        }
}

override fun onViewStateRestored(savedInstanceState: Bundle?) {
    super.onViewStateRestored(savedInstanceState)
    if (savedInstanceState != null)
        when (feedType) {
            MAIN.name, DISMISSED.name -> savedRecyclerLayoutState = savedInstanceState.getParcelable(CONTENT_RECYCLER_VIEW_STATE)
            SAVED.name -> savedRecyclerPosition = savedInstanceState.getInt(CONTENT_RECYCLER_VIEW_POSITION)
        }
}

Чтобы убедиться, что сохраненный индекс не выходит за пределы, требуется проверка. Кроме того, поскольку элементы RecyclerView отклоняются, важно очистить сохраненную позицию индекса, чтобы RecyclerView не обновлялся после отклонения элемента, поскольку этот фрагмент кода содержится в [113 ] наблюдатель.

if (feedType == SAVED.name && savedRecyclerPosition != 0) {
                        val position: Int =
                                if (savedRecyclerPosition >= adapter.itemCount) adapter.itemCount - 1
                                else savedRecyclerPosition
                        contentRecyclerView.layoutManager?.scrollToPosition(position)
                        savedRecyclerPosition = 0
                    }
0
ответ дан Adam Hurwitz 19 January 2019 в 03:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: