与碎片通信

时间:2013-05-31 00:12:16

标签: android android-fragments

我有一个不扩展Activity的类(并且因为它扩展CursorAdapter而不能)CursorAdapter需要与它填充的片段进行通信,更具体地说,每个列表项都有一个按钮,每当点击该按钮时我需要它来刷新列表并执行此操作我需要调用getFragmentManager()

我的问题:因为我正在延长CursorAdapter我无法调用getFragmentManager()(必须从片段或活动中调用它。)

我尝试过的。 我想做的第一件事(它可能是正确的,我只是因为我缺乏java技能而破坏了实现)是创建一个扩展Activity的类,它将与我的游标适配器片段连接。代码:

public class FragManager extends Activity {

   public FragManager() {
   }

    public void refreshList() {

        QCListFragment fragmentB = (QCListFragment) getFragmentManager().findFragmentById(R.id.listFragment);
        fragmentB.requeryList();
    }


}

这是在我的游标适配器中调用的。代码:

FragManager fragment = new FragManager();
            fragment.refreshList();

无论如何,我认为这是正确的思路但无法找到教程(也许是因为我不知道用什么词来搜索它)

任何帮助都会很精彩! 马立克

2 个答案:

答案 0 :(得分:1)

我现在不知道你的代码结构,但如果你的任何类是嵌套的,你可以访问包含类,如下所示:

public class MyActivity extends Activity {

    private MyAdapter adapter = new MyAdapter();

    public class MyAdapter extends CursorAdapter {

        public MyAdapter() {
            FragmentManager fm = MyActivity.this.getFragmentManager();
        }
    }
}

如果未使用嵌套,则可以将类的实例直接传递给需要访问它的类。

public class MyActivity extends Activity {

    private MyAdapter adapter = new MyAdapter(this);
}

public class MyAdapter extends CursorAdapter {

    public MyAdapter(Activity activity, Cursor c, int flags) {
        super(activity, c, flags);
        FragmentManager fm = activity.getFragmentManager();
    }
}

答案 1 :(得分:0)

您想从requeryList()

致电Activity

首先,我Activity应该延长FragmentActivity

以下是在所有情况下调用该方法的方法:

((QCListFragment) getSupportFragmentManager().findFragmentById(R.id.listFragment)).requeryList();

来自Fragment的{​​{1}}的调用方法:

Fragment

来自((QCListFragment) getFragmentManager().findFragmentById(R.id.listFragment)).requeryList(); 的{​​{1}}的调用方法:

FragmentActivity