当前位置: 首页 > 知识库问答 >
问题:

Detect when BaseAdapter.notifyDataSetChanged() finish

西门高歌
2023-03-14

我想知道<code>BaseAdapter的时间。notifyDataSetChanged()完成,然后执行以下操作。我的代码:

BaseAdapter.notifyDataSetChanged();  
mScroller.startScroll(oldX, 0, dx, 0);

mScrollernotifyDataSetChanged() 完成之前滚动。我希望 mScrollernotifyDataSetChanged() 完成后滚动到 oldX

请帮帮我,谢谢。

共有3个答案

燕雨石
2023-03-14

这很晚了,但可能对以后的任何人都有帮助。

如果您熟悉RxJava2Completable,您可以检测notifyDataSetChanged()或UI上的任何操作是否已完成。

        Completable.fromAction {
            // notifyDataSetChanged() here
        }
                .subscribe(object : DisposableCompletableObserver() {
                    override fun onComplete() {
                        recyclerView.scrollTo(position)
                    }

                    override fun onError(e: Throwable) {
                        // handle error here
                    }
                })
毋炳
2023-03-14

我有同样的确切问题,尝试一下它对我来说很完美。您正在重写 notifyDataSetChanged() 方法。您可以在适配器类中执行此操作。只需复制我发布的代码,并将我设置Selection()的行替换为您需要完成的任何操作。

@Override
public void notifyDataSetChanged()
{
    super.notifyDataSetChanged();

    parentGlobal.setSelection(this.getCount() - 1);  //This is how we start Activity fully scrolled to bottom
}

话虽如此,如果您想知道,“parentGlobal”是我在活动中设置适配器的ListView。在适配器的构造函数中,我传入ListView,然后将其设为“全局”。如果“全局”不是Java术语,我很抱歉,我来自C世界。

//进行活动:

lv_main = (ListView) findViewById(R.id.listView_conversation);
    adapter_main = new Adapter_Conversation(ConversationActivity.this, R.layout.layout_list_conversation,
            list_main_UI, lv_main, main_list_item_margin_px);
    lv_main.setAdapter(adapter_main);

//进入适配器

public Adapter_Conversation(AppCompatActivity activity, @LayoutRes int resource,
                            ArrayList<Adapter_GetSet_Conversation> list_conversation, ListView lv_main,
                            int item_margin_px)
慕容弘懿
2023-03-14

与扩展不同,< code>BaseAdapter支持注册一个< code>DataSetObserver,您可以在其中侦听< code>onChanged事件。

(通知)DataSetChanged方法将导致触发此事件。

adapter.registerDataSetObserver(new DataSetObserver() {
    @Override
    public void onChanged() {
        // ...
    }
});

...

adapter.notifyDataSetChanged();
 类似资料:
  • 问题内容: 我正在努力使应用程序更具实质性,而我仅停留在如何实现一些共享元素转换上。我有一个活动A,该活动A开始另一个B,然后调用finish()以便将其从后堆栈中删除。就我而言,我想在两个活动之间共享一个元素,但是一旦将其从A传递到B,A就不再重要了。如果在startActivity(ctx,intent,bundle)之后不调用finish(),则退出/输入动画效果很好。但是,如果我确实打完,

  • 问题内容: 我目前正在编写一些Android单元测试,虽然我已经按照自己想要的方式完成了大多数工作,但有一件事让我有些困惑。 我的测试活动中包含以下代码: 我试图弄清楚如何使用Instrumentation(或其他工具)来读取活动的结果,或者在活动完成后获得意图。有人可以帮忙吗? 问题答案: 您可以使用反射并直接从活动中获取值。

  • 问题内容: 在任何地方都找不到可靠的答案。我有一个方法,其中调用finish(),然后再调用onPause()。 是否一定要在调用finish()之后调用onPause()? 问题答案: Android将一般称之为如果你打电话你活动的整个生命周期期间的某个点,除非你叫你的。 运行,并观察您的日志将只包含“ onDestroy”。几乎在其他任何地方调用,您都会看到onPause()被调用。

  • 我使用Inno Setup 6. x的目标是在代码中自定义文本,即Pascal Script。我使用Pascal Script的原因是我只想在为真时自定义/更改标签。我该怎么做? 以下两种方法不起作用: > 使用脚本常量: 这显示的是“{code:GetFinishedLabel}”,而不是“BLA”。 在< code>InitializeWizard中自定义向导。 完整(失败)示例: 仍然显示中

  • 我正试图从服务器获取一些数据。用户单击search,另一个activity由startActivityForResult()启动。当用户单击数据时,数据应该放在intent中,setResult()用该intent完成,并调用finish()。现在我已经尝试了debugg,但是当调用finish()时,activity不会返回到调用这个activity的那个。相反,应用程序关闭了。 这是代码; 上

  • 根据Android文档,finish()的功能与“后退”按钮的功能完全相同。基本上,当我调用finish()时,会调用onStop()。 我试图重写onStateSaveInstance()以保存当前状态,但从未调用它。但是,如果通过创建新的Intent并使用startActivity()转到上一个活动,则会调用onStateSaveInstance()方法。这有什么原因吗?

  • 我正在使用下面的代码将postingdata添加到firebase中。问题是,当我在onComplete中注释finish方法时,我的所有数据都正确写入firebase数据库。但是,当我取消对finish方法的注释时,大多数数据都不是用datbase编写的。我想用finish方法写入完整数据。

  • 当我的应用程序运行时,推送通知通过ReceivedRemoteNotification方法按预期工作。但是,当我在应用程序未运行时向应用程序发送推送通知时,我希望收到的推送通知会启动应用程序并调用FinishedLaunching,但我根本看不到这一点。你知道我遗漏了什么吗? 问题必须出现在以下三个地方之一:苹果开发者证书端、应用程序代码端或plist文件。由于推送通知在应用程序运行时工作,因此证