从来自不同线程

时间:2016-06-21 13:15:15

标签: android android-fragments

我对Androind很新,试图弄清楚片段和活动应该如何协同工作。我有一个非常丑陋的布局。 1活动和1" root"分段。当用户点击左侧菜单片段被片段管理器替换时。

expandableList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
    @Override
    public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {

        LeftMenuItem group = groups.get(i);
        String fragmentTag = group.getFragmentTag();
        if (fragmentTag.equals(Fragment1.TAG)) {
            Fragment1 fragment = (Fragment1) currentFragmentManager.findFragmentByTag(Fragment1.TAG);
            if (fragment == null) {
                fragment = new Fragment1();
            }
            FragmentTransaction ft = currentFragmentManager.beginTransaction();
            ft.replace(R.id.root_frame, fragment, Fragment1.TAG);
            ft.commitAllowingStateLoss();

        } else if (fragmentTag.equals(Fragment2.TAG)) { 

我假设上面的代码应该用新的代码替换当前的代码。片段实际上总是为空。我不知道为什么。

在RootFragment的onCreateView中,默认情况下会创建Fragment1。

    if (savedInstanceState == null) {
        Log.d(TAG, "savedInstanceState is null, creating Framgent1");

        Fragment1 fragment = new Fragment1();
        FragmentTransaction ft = currentFragmentManager.beginTransaction();
        ft.replace(R.id.root_frame, fragment, Fragment1.TAG);
        ft.commitAllowingStateLoss();
    }

在rootFragment的onCreateView中,rootFragment将自己替换为另一个Fragment1,这对我来说非常难看。它是众所周知的Androind模式还是只是糟糕的设计?

让我们假设使用Volley从MyActivity的onCreateView发送httpRequest。收到回复后,我需要从回调中更新Fragment1 UI。我该怎么办?

  1. 我是否应该尝试在活动中使用findFragmentByTag查找片段并直接更新UI? http volley响应是否在同一个线程中?如果不是,可以从不同的线程更新UI吗?

  2. 我应该使用Handler类将消息从Activity发送到片段吗?

1 个答案:

答案 0 :(得分:1)

  1. 我应该尝试在活动中使用findFragmentByTag查找片段并直接更新UI吗? http volley响应是否在同一个线程中?如果不是,可以从不同的线程更新UI吗?
  2.   

    findFragmentByTag因为只要替换就没有用   调用,前一个片段被销毁。如果你只有几个   要切换的片段,可以在解决方案下使用hte:

         

    How can I switch between two fragments, without recreating the fragments each time?

    回答问题2的第二部分:

      

    排球响应总是在主线程上被完美地调用   好的,可以在回调上更新UI。您永远不应该更新UI元素   在MAIN / UI线程以外的任何线程上。

    1. 我应该使用Handler类将消息从Activity发送到Fragment吗?
    2.   

      你可以选择通过处理程序发送消息,但是如果通常android文档建议通过回调发送活动和附加片段之间的通信

           

      https://developer.android.com/training/basics/fragments/communicating.html