首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >底部工作表对话框片段不显示

底部工作表对话框片段不显示
EN

Stack Overflow用户
提问于 2018-06-08 05:56:55
回答 1查看 1.5K关注 0票数 1

我创建了一个Modal Bottom Sheet片段,默认情况下有以下几行

代码语言:javascript
复制
/**
* <p>A fragment that shows a list of items as a modal bottom sheet.</p>
* <p>You can show this modal bottom sheet from your activity like this:</p>
* <pre>
* ShoppingCartListDialogFragment.newInstance(30).show(getSupportFragmentManager(), "dialog");
* </pre>
* <p>You activity (or fragment) needs to implement {@link ShoppingCartListDialogFragment.Listener}.</p>
*/

然后在我的MainActivity.java上有一个onClick函数,如下所示:

代码语言:javascript
复制
public void showShoppingCart(View view) {
    // Testing
    ShoppingCartListDialogFragment.newInstance(30).show(getSupportFragmentManager(), "dialog");
}

每当我单击应用程序崩溃的按钮时,我就会从片段的onAttach方法中得到一个错误

代码语言:javascript
复制
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    final Fragment parent = getParentFragment();
    if (parent != null) {
        mListener = (Listener) parent;
    } else {
        mListener = (Listener) context; <-- Error on this line
    }
}

有人知道我错过了什么吗?我真的不明白最后一行的评论。我在哪里实现.Listener

错误日志:

代码语言:javascript
复制
FATAL EXCEPTION: main
              Process: com.example.johng.assosfood, PID: 28856
              java.lang.ClassCastException: com.example.johng.assosfood.ProductsActivity cannot be cast to com.example.johng.assosfood.ShoppingCartListDialogFragment$Listener
                  at com.example.johng.assosfood.ShoppingCartListDialogFragment.onAttach(ShoppingCartListDialogFragment.java:59)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1367)
                  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1754)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1822)
                  at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
                  at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2591)
                  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2378)
                  at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2333)
                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2240)
                  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703)
                  at android.os.Handler.handleCallback(Handler.java:751)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6682)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 06:10:01

当我为片段设置侦听器时,我的onAttach()通常如下所示:

代码语言:javascript
复制
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof yourFragmentListener) {
        mListener = (yourFragmentListener) context;
    } else {
        // Error Code
    }
}

这样,它只在附加到的活动实现其侦听器时才进行强制转换。如果您得到的是错误代码,则很可能没有在MainActivity中实现片段的侦听器。如下所示:

代码语言:javascript
复制
public class MainActivity extends Activity implements ShoppingCartListDialog.Listener {
// If it successfully implements, (you have all the methods
//defined in this class) then it is an instance of the listener
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50750701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档