当前位置: 首页 > 面试题库 >

动态更新片段

南宫鸿晖
2023-03-14
问题内容

我基本上有一个具有多个选项卡的MainActivity。每个选项卡都是一个ShowListFragment,它扩展了Fragment。现在,每个选项卡都包含我从数据库中获取的数据。我有一个MOVE按钮,可将数据从每个片段的一个选项卡移动到另一个选项卡:

@Override
public void onClick(DialogInterface dialog, int listIndex) {
    database.add(listIndex,object);
    database.remove(listIndex,object);
}

片段不会直接更新,而是在选项卡之间滑动了几下(恰好3次)。单击按钮后如何强制片段立即更新?我不想通过ViewPager中的onPageSelected来管理它,因为它不会更新我当前所在的片段,而是在我切换到下一个片段之后。而且我也不想在每次滑动后更新数据。

我知道我可能需要使用这样的某种观察者模式:当一个类也扩展了另一个类时,如何使它扩展成为可观察的?
但是,我仍然不确定如何直接更新片段,以及如何在应用程序中应用观察者/事件模式。


问题答案:

由于片段可以使用轻松地访问活动getActivity(),因此我将使活动成为调度更新的中心。

听起来您已经使用数据库处理了持久性部分,而您所需要做的只是一些更新事件。因此,这里去:

  1. 定义一个侦听器接口。我通常将此作为活动中的内部接口进行操作:

        public interface DataUpdateListener {
        void onDataUpdate();
    }
    
  2. 在活动中添加数据结构以跟踪侦听器:

        private List<DataUpdateListener> mListeners;
    

不要忘记在构造函数中初始化:

            mListeners = new ArrayList<>();
  1. 将注册/注销方法添加到活动中:

        public synchronized void registerDataUpdateListener(DataUpdateListener listener) {
        mListeners.add(listener);
    }
    
    public synchronized void unregisterDataUpdateListener(DataUpdateListener listener) {
        mListeners.remove(listener);
    }
    
  2. 将事件方法添加到您的活动中:

        public synchronized void dataUpdated() {
        for (DataUpdateListener listener : mListeners) {
            listener.onDataUpdate();
        }
    }
    
  3. 让您的片段实现DataUpdateListener:

    public class MyFragment extends Fragment implements DataUpdateListener {
    

并实施该方法

        @Override
    public void onDataUpdate() {
        // put your UI update logic here
    }
  1. 覆盖onAttach()onDestroy()在片段中进行注册/注销:

        @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        ((MainActivity) activity).registerDataUpdateListener(this);
    }
    
    @Override
    public void onDestroy() {
        super.onDestroy();
        ((MainActivity) getActivity()).unregisterDataUpdateListener(this);
    }
    
  2. 在片段的UI更新事件中触发事件:

        @Override
    public void onClick(DialogInterface dialog, int listIndex) {
        database.add(listIndex,object);
        database.remove(listIndex,object);
        ((MainActivity) getActivity()).dataUpdated();
    }
    


 类似资料:
  • 我希望能够动态更新我的Swing GUI的LookAnd感到属性。在这种情况下,我有一个简单的Swing/Awt游戏,运行的最初是Nimbus。在启动后的不同时间点,我想更改(让我们说)一个细节:我的应用程序的背景颜色。 我可以通过这样做来改变背景颜色: 这“有效”,因为应用程序的背景颜色会正确更改并且程序不会崩溃。但是在命令行上我收到错误: 显然,有些东西是空的,但我不知道它是什么,也不知道如何

  • V1.1.1新增 <?php $data=array("URL_HTML_SUFFIX"=>".html"); $result=sp_set_dynamic_config($data); ?>

  • 计算属性检测对属性所做的更改,并在使用set()方法调用它们时动态更新计算属性。 语法 (Syntax) ClassName.set('VariableName', 'UpdatedValue'); 例子 (Example) 以下示例显示了对属性进行更改时动态更新的值 - import Ember from 'ember'; export default function() { var

  • 我尝试使用onTabSelected来检测某个片段何时被选中,然后在接口的帮助下从该片段启动一个方法(下面的代码)。 但是,当使用Start方法时,在尝试更新TextView时会激发NullPointerException。start方法的代码是: 在以下行抛出异常: 是的,我已经在网上查过了所有可用的东西,但似乎没有任何东西对我有用。 非常感谢您的帮助!

  • 我试图建立在一个问题的答案关于SwingProperty tyChangeSupport 我试图修改这里给出的代码,这是一个非常有用的、满是鳗鱼的气垫船的回答:WindowListener无法按预期工作,以便在通过输入对话框输入更改时更新显示的数组。 阵列已正常更新,但未在GUI中刷新。我希望有人能告诉我哪里出了问题。 以下是代码: -编辑-希望删除编译错误。

  • 我是android编程的新手。虽然我在Access上搜索了这个问题,但没有找到任何令人满意的解决方案: 问题是:我想动态地将一个图像设置为imageview--它位于一个片段中。 我想使用图像的文件名来完成这个操作。 但我得到了NullPointerException: java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“void android.widge