Android:使用界面将回调发送到Fragment

时间:2014-07-26 18:55:34

标签: android android-fragments interface callback broadcastreceiver

我有一个HomeActivity,底部有四个标签,每个标签都是一个片段。所以,我有四个片段,即Fragment1Fragment2Fragment3Fragment4。以下是我创建这些标签的代码。

public void addTabs() {
    addTab("Recent", R.drawable.ic_launcher, FragmentRecent.class);
    addTab("Groups", R.drawable.ic_launcher, FragmentGroups.class);
    addTab("Contacts", R.drawable.ic_launcher, FragmentContacts.class);
    addTab("Settings", R.drawable.ic_launcher, FragmentSettings.class);
}

/**
 * Adding tabs to the screen
 * @param label Tab title
 * @param drawableId Tab icon
 * @param c Tab fragment class
 */
private void addTab(String label, int drawableId, Class<?> c) {
    TabHost.TabSpec spec = mTabHost.newTabSpec("tab" + label);
    final View tabIndicator = LayoutInflater.from(this).inflate(
            R.layout.tab_indicator, mTabHost.getTabWidget(), false);

    final TextView title = (TextView) tabIndicator.findViewById(R.id.tab_title); title.setText(label);

    final ImageView icon = (ImageView) tabIndicator.findViewById(R.id.tab_icon);
    icon.setImageResource(drawableId);

    spec.setIndicator(tabIndicator);
    mTabHost.addTab(spec, c, null);
}

我有一个BroadcastReceiver,它将数据插入本地数据库,最后发送回调给Fragment1。我有一个接口ISendResult,它在此BroadcastReceiver中定义,由Fragment1实现。一旦数据库发生变化,我想在Fragment1中做一些事情,比如说我想刷新它的视图。

以下是界面

的声明
public interface ISendResult{
    public void sendResult(boolean dbChanged);
}

以下是将回调发送到Fragment的代码行。

((ISendResult) Fragment1.mFragment1).sendResult(true);

我无法将回调发送给Fragment1。我正在获得类强制转换异常。如果我使用相同的样式/方法将回调发送到某些活动,我的任务就会得到满足。但是我无法对Fragment做同样的事情。请帮助我。

还有其他方法可以实现吗?

修改

以下是ClassCastException的日志

    java.lang.RuntimeException: Unable to start receiver com.example.demo.app.MsgReceiver: java.lang.ClassCastException: com.example.demo.activity.HomeActivity
        at android.app.ActivityThread.handleReceiver(ActivityThread.java:1805)
        at android.app.ActivityThread.access$2400(ActivityThread.java:117)

此处MsgReceiver是BroadcastReceiver。

0 个答案:

没有答案