【发布时间】:2013-08-11 12:33:12
【问题描述】:
我一直使用this example 作为我的项目的基础。
我已更改项目以将 ArrayAdapter 用于titles-fragment 的 ListItems 并更改 DetailsFragment 的 View 以显示自定义布局,该布局作为应将条目添加到数据库中的 Button。
我没有像示例中那样生成小部件,而是在“layout-land”版本布局中的 TitlesFragment 之外,将自定义 XML 膨胀到 FrameLayout 中。
我的问题源于这样一个事实,即 DetailsFragment 在横向模式下插入 MainActivity,但在纵向模式下获得它自己的 DetailsActivty。
我在自定义布局中为 details-fragment 设置的 Button 在其 onClick() 中调用了一个名为 AddNewItem 的函数。
所以当在横向模式下点击 Button 时,它崩溃了,因为 MainActivity 中没有 AddNewItem。我通过使用 BroadcastReceiver 解决了这个问题,因此当单击按钮时,MainActivity.java 中名为 AddNewItem 的方法会广播自定义事件,并且我有一个 BroadcastReceiver,它调用 DetailsFragment.java 中的 AddNewItem。
看起来像这样:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
DetailsActivity m = (DetailsActivity) DetailsActivity.getActivityInstance(); // see below for what getActivityInstance does
LayoutInflater mInf = LayoutInflater.from(context);
View myView = mInf.inflate(R.layout.customlayout, null);
((DetailsActivity) m).AddNewItem(myView);
}
}
但这给了我:
08-11 13:37:50.687: E/AndroidRuntime(6766): java.lang.RuntimeException: Unable to start receiver in.falkeninc.umt_v0_9_8_1.MyReceiver: java.lang.NullPointerException
我不确定发生了什么。因为我还在 DetailsActivity.java 中使用了一个静态变量,以便能够在 BroadcastReceiver 中访问它。代码如下所示:
public class DetailsActivity extends SherlockFragmentActivity {
...
public static SherlockFragmentActivity activityInstance;
...
activityInstance = this; // in the onCreate
...
public static SherlockFragmentActivity getActivityInstance(){
return activityInstance;
}
}
【问题讨论】:
标签: android view android-activity broadcastreceiver fragment